Gradle - Test

La tâche de test détecte et exécute automatiquement tous les tests unitaires de l'ensemble de sources de test. Il génère également un rapport une fois l'exécution du test terminée. JUnit et TestNG sont les API prises en charge.

La tâche de test fournit un Test.getDebug()méthode qui peut être définie pour se lancer pour que la JVM attende un débogueur. Avant de procéder à l'exécution, il définit la publication du débogueur sur5005.

Détection de test

le Test Taskdétecte quelles classes sont des classes de test en inspectant les classes de test compilées. Par défaut, il analyse tous les fichiers .class. Vous pouvez définir des inclusions / exclusions personnalisées, seules ces classes seront analysées. En fonction du framework de test utilisé (JUnit / TestNG), la détection de classe de test utilise différents critères.

Lors de l'utilisation de JUnit, nous recherchons à la fois les classes de test JUnit 3 et 4. Si l'un des critères suivants correspond, la classe est considérée comme une classe de test JUnit -

  • Une classe ou une super classe étend TestCase ou GroovyTestCase
  • La classe ou une super classe est annotée avec @RunWith
  • La classe ou une super classe contient une méthode annotée avec @Test
  • Lors de l'utilisation de TestNG, nous recherchons des méthodes annotées avec @Test

Note- Les classes abstraites ne sont pas exécutées. Gradle analyse également l'arborescence d'héritage dans des fichiers jar sur le chemin de classe de test.

Si vous ne souhaitez pas utiliser la détection de classe de test, vous pouvez la désactiver en définissant scanForTestClasses à faux.

Regroupement de tests

JUnit et TestNG permettent des regroupements sophistiqués de méthodes de test. Pour le regroupement, les classes et méthodes de test JUnit JUnit 4.8 introduit le concept de catégories. La tâche de test permet de spécifier les catégories JUnit que vous souhaitez inclure et exclure.

Vous pouvez utiliser l'extrait de code suivant dans le fichier build.gradle pour regrouper les méthodes de test.

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

Inclure et exclure des tests particuliers

le Test la classe a un include et excludeméthode. Ces méthodes peuvent être utilisées pour spécifier les tests à exécuter.

Exécutez uniquement les tests inclus -

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

Ignorer les tests exclus -

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

L'échantillon build.gradle comme indiqué ci-dessous, il montre différentes options de configuration.

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 )
   }
}

Vous pouvez utiliser la syntaxe de commande suivante pour exécuter une tâche de test.

gradle <someTestTask> --debug-jvm