2016-02-17 26 views
6

Mi piacerebbe essere in grado di avere due (o più) compiti di test per il mio progetto Android, dove la differenza è un diverso insieme di categorie di Junit da includere/escludere.Test delle unità Android delle categorie

Utilizzando il plugin Java Gradle, posso fare qualcosa di simile

task testFast(type: Test) { 
    useJUnit { 
     includeCategories 'foo.Fast' 
     excludeCategories 'foo.Slow' 
    } 
} 

task testSlow(type: Test) { 
    useJUnit { 
     includeCategories 'foo.Slow' 
     excludeCategories 'foo.Fast' 
    } 
} 

Tuttavia, se si utilizza il plugin di Android, devo aggiungere testOptions alla chiusura Android per includere/escludere

android { 
... 
    testOptions { 
     unitTests.all { 
      useJUnit { 
       excludeCategories foo.Slow' 
      } 
     } 
    } 
... 
} 

ma ovviamente si applica a tutte le attività di test per tutte le varianti di costruzione.

C'è un modo per creare attività che utilizzano la stessa variante di build, ma eseguire test su diverse categorie?

risposta

5

migliore che è venuta in mente è quello di utilizzare una proprietà Gradle dalla riga di comando:

testOptions { 
    unitTests.all { 
     useJUnit { 
      if (project.hasProperty('testCategory') && testCategory == "Slow") { 
       includeCategories 'foo.Slow' 
      } else { 
       excludeCategories 'foo.Slow' 
      } 
     } 
    } 
} 

e utilizzare

gradlew -PtestCategory=Slow test 
0

avevo bisogno di una soluzione che che non richiede un ulteriore Gradle proprietà, quindi mi sono inventato questo. Tuttavia, devi assicurarti di eseguire sempre al massimo una delle attività di test in una sola esecuzione.

Spero che il plug-in Android renderà questo più facile nelle versioni future.

task testFast(dependsOn: 'testDebugUnitTest') 
task testSlow(dependsOn: 'testDebugUnitTest') 

gradle.taskGraph.whenReady { taskGraph -> 
    def testTask = tasks.getByName("testDebugUnitTest") 

    if (taskGraph.hasTask(tasks.getByName("testFast"))) { 
     testTask.useJUnit { 
      includeCategories 'foo.Fast' 
      excludeCategories 'foo.Slow' 
     } 
    } 

    if (taskGraph.hasTask(tasks.getByName("testSlow"))) 
     testTask.useJUnit { 
      includeCategories 'foo.Slow' 
      excludeCategories 'foo.Fast' 
     } 
    } 
} 
Problemi correlati