10

Sto cercando di separare i test di integrazione in Android Studio 0.9.Separazione dei test di integrazione dai test delle unità in Studio Android

ho aggiunto il seguente al file di generazione:

sourceSets { 
    integrationTest { 
     java.srcDir file('src/integrationTest/java') 
    } 
} 

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

ho incontrato un paio di questioni:

  1. L'attività verrà eseguita, ma non ha il resto dei file di progetto disponibili in modo da ottenere errori sulle classi mancanti. Ci sono alcune soluzioni specifiche Java che ho trovato come ad esempio:

    Ma io non sono stato in grado di capire come ottenere questo per funzionare con Android Studio. Varie combinazioni di main e main.output e giocare con le dipendenze non sembrano lavorare, ricevo errori come:

    Error:(33, 0) Could not find property 'main' on SourceSet container.. 
    

    che ha senso come il plugin di Android definisce i propri set di origine, ma questi non funzionano neanche .

  2. L'IDE non riconosce la directory come directory di origine del test. A scopo di test, ho modificato il nome del set di origine in androidTest e ottiene correttamente l'icona della cartella verde ei test vengono eseguiti insieme ai test di unità esistenti già definiti in androidTest.

+1

Hai mai questo lavoro? Ricevo errori java simili e la classe di test non trova errori anche dopo aver seguito i collegamenti. – user484691

+0

Alla fine non sono riuscito a farli funzionare come test separati in modo soddisfacente, ho appena usato un singolo seme di prova. – Philio

+0

Grazie per l'aggiornamento. Non sono riuscito a eseguire test nel mio modulo SDK. C'è qualcosa che mi manca. Ho provato ad eseguire un singolo test e continuo ad ottenere errori di classe non trovati. – user484691

risposta

1

ho fatto esattamente questo tipo di separazione Gradle, ma per un progetto Java pura, non Android. Non stai specificando il classpath nei set sorgente, che penso sia il problema. Ecco la parte rilevante del build.gradle:

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

configurations { 
    integrationCompile.extendsFrom testCompile 
    integrationRuntime.extendsFrom testRuntime 
} 

task integrationTest(group: "verification", type: Test) { 
    testClassesDir = sourceSets.integration.output.classesDir 
    classpath = sourceSets.integration.runtimeClasspath 
} 
integrationTest.dependsOn testClasses 

IntelliJ IDEA raccoglie le cartelle in src/integration se hanno i nomi standard (Java, risorse).

+0

purtroppo questo funziona solo per il plugin java, non l'app per Android o il plugin per la biblioteca – Rule

1

@ risposta di sm4 funziona davvero per un modulo Java (con apply plugin: 'java'), ma purtroppo non per l'applicazione Android (apply plugin: 'com.android.application'), né moduli della libreria Android (apply plugin: com.android.library).

Ma ho trovato una soluzione:
creare le cartelle per i test di integrazione:

src/integrationTest/java 
src/integrationTest/res 

Aggiungere le sourceSets per le nuove cartelle:

sourceSets { 
    integrationTest { 
     java { 
      srcDir file('src/integrationTest/java') 
     } 
     res { 
      srcDir file('src/integrationTest/res') 
     } 
    } 
} 

In un modulo Java puro la cartella java diventerà ora verde e l'icona della cartella res cambierà. In un modulo di applicazione/libreria Android non è così.

Ora creare un aroma prodotto identico al nome della cartella configurata nel set origine e funziona!

productFlavors { 
    integrationTest { 
    } 
} 

E per mettere una ciliegina sulla torta:

configurations { 
    integrationTestCompile.extendsFrom testCompile 
} 
Problemi correlati