2013-05-24 20 views
10

Sto tentando di aggiungere Gradle (1.4) a un progetto esistente con più suite di test. Il test unitario standard situato in src/test/java ha funzionato correttamente, ma sto riscontrando problemi nell'impostare un'attività per eseguire il test JUnit situato in src/integration-test/java.Aggiunta di una suite di test aggiuntiva a Gradle

Quando corro gradle intTest Ottengo più errori cannot find symbol per le classi in src/main. Questo mi porta a credere che le dipendenze non siano impostate correttamente. Come posso impostare intTest in modo che esegua i miei test di integrazione JUnit?

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 
} 

Dettagli: Gradle 1,4

Soluzione: non avevo impostare il percorso di classe di compilazione per il set fonte test di integrazione (vedi sotto) . Nel mio codice che ho io impostare il percorso di classe di compilazione a sourceSets.test.runtimeClasspath in modo che non ho le dipendenze duplicate per "integrationCompile"

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

Eventuali duplicati di [Come faccio ad aggiungere un nuovo sourceset a Gradle?] (Http://stackoverflow.com/questions/11581419/how-do-i-add-a-new-sourceset-to- gradle) –

risposta

7

l ' "integrazione" sourceSet non ha configurato la sua compilazione e classpath runtime. Ecco perché non riesce a trovare le classi dal tuo set sorgente principale. è possibile configurare la compilazione e di runtime classpath nel seguente modo:

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

Grazie, ho solo bisogno di impostare esplicitamente 'compileClasspath'. Il percorso di classe Runtime viene automaticamente impostato come 'classes + compileClasspath' –

+1

In Gradle 1.6 non troverete' classes'. Usa invece 'output'. – Piohen

+0

buon punto. Ho aggiornato il mio esempio –

4

Nella maggior parte dei casi si desidera utilizzare le stesse dipendenze, come il test di unità così come alcuni nuovi. Ciò aggiungerà le dipendenze dei test delle unità in aggiunta a quelle esistenti per i test di integrazione (se presenti).

sourceSets { 
    integrationTest { 
     compileClasspath += sourceSets.test.compileClasspath 
     runtimeClasspath += sourceSets.test.runtimeClasspath 
    } 
} 
+0

Vuoi collegare qualche documentazione per supportare questo? Grazie –

+0

la documentazione di @MikeRylander su cosa in particolare? Se si tratta dell'operatore '+ =', puoi vedere che 'FileCollection' ha un metodo' plus' per supportare l'override dell'operatore '+' e '+ =': http://www.gradle.org/docs/current /javadoc/org/gradle/api/file/FileCollection.html – qwertzguy

+0

Vedo che il set di origini integrationTest sta estendendo il classpath di prova, ma che cosa fa il secondo blocco di codice? –

Problemi correlati