2013-05-24 18 views
10

पर अतिरिक्त परीक्षण सूट जोड़ना मैं एक मौजूदा प्रोजेक्ट में ग्रैडल (1.4) जोड़ने का प्रयास कर रहा हूं जिसमें एकाधिक परीक्षण सूट हैं। src/test/java में स्थित मानक इकाई परीक्षण सफलतापूर्वक भाग गया, लेकिन मुझे src/integration-test/java में स्थित जुनीट परीक्षण चलाने के लिए एक कार्य स्थापित करने में समस्या हो रही है।ग्रैडल

जब मैं gradle intTest चलाता हूं तो मुझे src/main में कक्षाओं के लिए कई cannot find symbol त्रुटियां मिलती हैं। यह मुझे विश्वास दिलाता है कि निर्भरता सही ढंग से स्थापित नहीं हैं। मैं intTest कैसे सेटअप करूं ताकि यह मेरे जुनीट एकीकरण परीक्षण चलाए?

build.gradle

apply plugin: 'java' 

sourceCompatibility = JavaVersion.VERSION_1_6 

sourceSets { 
    integration { 
     java { 
      srcDir 'src/integration-test/java' 
     } 
     resources { 
      srcDir 'src/integration-test/resources' 
     } 
    } 
} 

dependencies { 
    compile(group: 'org.springframework', name: 'spring', version: '3.0.7') 

    testCompile(group: 'junit', name: 'junit', version: '4.+') 
    testCompile(group: 'org.hamcrest', name: 'hamcrest-all', version: '1.+') 
    testCompile(group: 'org.mockito', name: 'mockito-all', version: '1.+') 
    testCompile(group: 'org.springframework', name: 'spring-test', version: '3.0.7.RELEASE') 

    integrationCompile(group: 'junit', name: 'junit', version: '4.+') 
    integrationCompile(group: 'org.hamcrest', name: 'hamcrest-all', version: '1.+') 
    integrationCompile(group: 'org.mockito', name: 'mockito-all', version: '1.+') 
    integrationCompile(group: 'org.springframework', name: 'spring-test', version: '3.0.7.RELEASE') 
} 


task intTest(type: Test) { 
    testClassesDir = sourceSets.integration.output.classesDir 
    classpath += sourceSets.integration.runtimeClasspath 
} 

विवरण: Gradle 1,4

समाधान: मैं एकीकरण परीक्षण स्रोत सेट के लिए संकलन classpath सेट नहीं था (देखें नीचे) । मेरी मैं कोड में मैं sourceSets.test.runtimeClasspath के संकलन वर्ग पथ सेट इतना है कि मैं "integrationCompile"

sourceSets { 
    integrationTest { 
     java { 
      srcDir 'src/integration-test/java' 
     } 
     resources { 
      srcDir 'src/integration-test/resources' 
     } 
     compileClasspath += sourceSets.main.runtimeClasspath 
    } 
} 
+0

संभावित डुप्लिकेट http://stackoverflow.com/questions/11581419/how-do-i-add-a-new-sourceset-to- ग्रेडल) –

उत्तर

7

के लिए डुप्लिकेट निर्भरता की जरूरत नहीं है "एकीकरण" sourceSet अपने संकलन और रनटाइम classpath कॉन्फ़िगर नहीं किया गया है। यही कारण है कि यह आपके मुख्य स्रोत से कक्षाएं नहीं ढूंढ सकता है। आप निम्नलिखित तरीके से संकलन और रनटाइम classpath कॉन्फ़िगर कर सकते हैं:

sourceSets { 
    integTest { 
     java.srcDir file('src/integration-test/java') 
     resources.srcDir file('src/integration-test/resources') 
     compileClasspath = sourceSets.main.output + configurations.integTest 
     runtimeClasspath = output + compileClasspath 
    } 
} 
+0

धन्यवाद, मुझे केवल 'compileClasspath' को स्पष्ट रूप से सेट करने की आवश्यकता है। रनटाइम क्लासपाथ स्वचालित रूप से 'कक्षा + संकलन क्लासपाथ' –

+1

के रूप में सेटअप किया जाता है Gradle 1.6 में आपको 'कक्षाएं' नहीं मिलेंगी। इसके बजाए 'आउटपुट' का प्रयोग करें। – Piohen

+0

अच्छा बिंदु पियोहेन। मैंने अपना उदाहरण –

4

ज्यादातर मामलों में आप अपनी इकाई परीक्षण के साथ ही कुछ नए रूप में एक ही निर्भरता का उपयोग करना चाहते। यह एकीकरण परीक्षण (यदि कोई हो) के लिए मौजूदा इकाइयों के शीर्ष पर आपके यूनिट परीक्षण की निर्भरता जोड़ देगा।

sourceSets { 
    integrationTest { 
     compileClasspath += sourceSets.test.compileClasspath 
     runtimeClasspath += sourceSets.test.runtimeClasspath 
    } 
} 
की [मैं कैसे Gradle के लिए एक नया sourceset जोड़ सकता हूँ?] (
+0

अपडेट किया है क्या आप इसका समर्थन करने के लिए कुछ दस्तावेज लिंक करेंगे? धन्यवाद –

+0

@ माइकरलैंडर दस्तावेज विशेष रूप से क्या है? यदि यह '+ =' ऑपरेटर के बारे में है, तो आप देख सकते हैं कि 'FileCollection' में' + 'और' + = ऑपरेटर ओवरराइड करने का समर्थन करने के लिए 'प्लस' विधि है: http://www.gradle.org/docs/current /javadoc/org/gradle/api/file/FileCollection.html – qwertzguy

+0

मुझे लगता है कि एकीकरण टेस्ट स्रोत सेट टेस्ट क्लासपाथ का विस्तार कर रहा है, लेकिन दूसरा कोड ब्लॉक क्या कर रहा है? –