Gradle - Test

L'attività di test rileva ed esegue automaticamente tutti gli unit test nel set di origini di test. Inoltre, genera un report una volta completata l'esecuzione del test. JUnit e TestNG sono le API supportate.

L'attività di test fornisce un file Test.getDebug()metodo che può essere impostato per l'avvio per fare in modo che la JVM attenda un debugger. Prima di procedere all'esecuzione, imposta il post del debugger su5005.

Rilevamento del test

Il Test Taskrileva quali classi sono classi di test esaminando le classi di test compilate. Per impostazione predefinita, esegue la scansione di tutti i file .class. È possibile impostare inclusioni / esclusioni personalizzate, verranno esaminate solo quelle classi. A seconda del framework di test utilizzato (JUnit / TestNG), il rilevamento della classe di test utilizza criteri diversi.

Quando si utilizza JUnit, eseguiamo la scansione per entrambe le classi di test JUnit 3 e 4. Se uno qualsiasi dei seguenti criteri corrisponde, la classe è considerata una classe di prova JUnit -

  • La classe o una super classe estende TestCase o GroovyTestCase
  • La classe o una super classe è annotata con @RunWith
  • La classe o una super classe contengono un metodo annotato con @Test
  • Quando si utilizza TestNG, eseguiamo la scansione dei metodi annotati con @Test

Note- Le classi astratte non vengono eseguite. Gradle analizza anche l'albero dell'ereditarietà in file jar sul classpath di test.

Se non desideri utilizzare il rilevamento della classe di test, puoi disabilitarlo impostando scanForTestClasses a falso.

Test raggruppamento

JUnit e TestNG consentono raggruppamenti sofisticati di metodi di test. Per il raggruppamento, classi e metodi di prova JUnit JUnit 4.8 introduce il concetto di categorie. L'attività di test consente la specifica delle categorie JUnit che si desidera includere ed escludere.

È possibile utilizzare il seguente frammento di codice nel file build.gradle per raggruppare i metodi di test.

test {
   useJUnit {
      includeCategories 'org.gradle.junit.CategoryA'
      excludeCategories 'org.gradle.junit.CategoryB'
   }
}

Includere ed escludere test particolari

Il Test la classe ha un file include e excludemetodo. Questi metodi possono essere utilizzati per specificare quali test devono essere effettivamente eseguiti.

Esegui solo i test inclusi -

test {
   include '**my.package.name/*'
}

Salta test esclusi -

test {
   exclude '**my.package.name/*'
}

Il campione build.gradle come mostrato di seguito mostra diverse opzioni di configurazione.

apply plugin: 'java' // adds 'test' task

test {
   // enable TestNG support (default is JUnit)
   useTestNG()

   // set a system property for the test JVM(s)
   systemProperty 'some.prop', 'value'

   // explicitly include or exclude tests
   include 'org/foo/**'
   exclude 'org/boo/**'

   // show standard out and standard error of the test JVM(s) on the console
   testLogging.showStandardStreams = true

   // set heap size for the test JVM(s)
   minHeapSize = "128m"
   maxHeapSize = "512m"

   // set JVM arguments for the test JVM(s)
   jvmArgs '-XX:MaxPermSize=256m'
   
   // listen to events in the test execution lifecycle
   beforeTest { 
      descriptor → logger.lifecycle("Running test: " + descriptor)
   }

   // listen to standard out and standard error of the test JVM(s)
   onOutput { 
      descriptor, event → logger.lifecycle
         ("Test: " + descriptor + " produced standard out/err: " 
         + event.message )
   }
}

È possibile utilizzare la seguente sintassi dei comandi per eseguire alcune attività di test.

gradle <someTestTask> --debug-jvm