2014-10-28 2 views
5

Voglio eseguire test che hanno la parola "integrazione" nel percorso da escludere con l'esecuzione di test predefinita, ma voglio eseguirli tutti insieme in un'attività separata. Attualmente ho una configurazione di prova di base:Attività di test di integrazione separata su gradle con Android

sourceSets { 
    androidTest.setRoot('src/test') 

    integrationTest.setRoot('src/test') 
} 

... 

androidTestCompile 'junit:junit:4.11' 
androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.1' 
androidTestCompile files('libs/android-junit-report-1.5.8.jar') 
androidTestCompile 'com.squareup:fest-android:1.0.8' 
androidTestCompile 'org.robolectric:robolectric:2.3' 

integrationTestCompile 'junit:junit:4.11' 
integrationTestCompile 'com.jayway.android.robotium:robotium-solo:5.1' 
integrationTestCompile files('libs/android-junit-report-1.5.8.jar') 
integrationTestCompile 'com.squareup:fest-android:1.0.8' 
integrationTestCompile 'org.robolectric:robolectric:2.3' 

... 

androidTest { 
    include '**/*Test.class' 
    exclude '**/espresso/**/*.class' 
    exclude '**/integration/**' 
} 

task integrationTest(type: Test) { 
    include '**/integration/**' 
} 

Questo causa un errore durante la sincronizzazione Gradle come:

Warning: project ':ProjectName': Unable to resolve all content root directories 
Details: java.lang.NullPointerException: null 

ma se tolgo il compito integrationTest non si verifica. Anche con il compito attuale sono in grado di eseguire l'operazione 'integrationTest', ma questo fa sì che un altro errore:

Error:Could not determine the dependencies of task ':ProjectName:integrationTest'. 
A base directory must be specified in the task or via a method argument! 

risposta

1

Non è del tutto ovvio, ma questo errore è causato da non definendo testClassesDir nella definizione compito.

task integrationTest(type: Test) { 
    include '**/integration/**' 
    testClassesDir = file('build/intermediates/classes') 
} 

Qualcosa di simile è descritto nel Gradle User Guide per il plug-in Java, ma non del tutto si traduce per il plugin di Android. Non ho ancora elaborato tutti i dettagli, ma aggiornerò questa risposta non appena l'avrò elaborata.