Gradle - testowanie

Zadanie testowe automatycznie wykrywa i wykonuje wszystkie testy jednostkowe w zestawie źródeł testów. Generuje również raport po zakończeniu wykonywania testu. JUnit i TestNG to obsługiwane interfejsy API.

Zadanie testowe zapewnia plik Test.getDebug()metoda, którą można ustawić do uruchomienia, aby maszyna JVM czekała na debuger. Przed przystąpieniem do wykonania ustawia post debugera na5005.

Wykrywanie testu

Plik Test Taskwykrywa, które klasy są klasami testowymi, sprawdzając skompilowane klasy testowe. Domyślnie skanuje wszystkie pliki .class. Możesz ustawić niestandardowe uwzględnienia / wykluczenia, tylko te klasy będą skanowane. W zależności od używanego środowiska testowego (JUnit / TestNG), wykrywanie klasy testów wykorzystuje różne kryteria.

Korzystając z JUnit, skanujemy w poszukiwaniu klas testowych JUnit 3 i 4. Jeśli którekolwiek z poniższych kryteriów jest zgodne, klasa jest uważana za klasę testową JUnit -

  • Klasa lub super klasa rozszerza TestCase lub GroovyTestCase
  • Klasa lub superklasa jest oznaczona adnotacją @RunWith
  • Klasa lub superklasa zawiera metodę z adnotacją @Test
  • Korzystając z TestNG, skanujemy w poszukiwaniu metod z adnotacją @Test

Note- Klasy abstrakcyjne nie są wykonywane. Gradle skanuje również drzewo dziedziczenia do plików jar w ścieżce klas testowych.

Jeśli nie chcesz używać wykrywania klas testowych, możesz je wyłączyć, ustawiając scanForTestClasses na fałsz.

Grupowanie testów

JUnit i TestNG umożliwiają wyrafinowane grupowanie metod testowych. Do grupowania, klasy i metody testowe JUnit JUnit 4.8 wprowadza pojęcie kategorii. Zadanie testowe umożliwia określenie kategorii JUnit, które chcesz uwzględnić i wykluczyć.

Możesz użyć następującego fragmentu kodu w pliku build.gradle do grupowania metod testowych.

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

Uwzględnij i wyklucz określone testy

Plik Test klasa ma include i excludemetoda. Tych metod można użyć do określenia, które testy należy faktycznie uruchomić.

Uruchom tylko dołączone testy -

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

Pomiń wykluczone testy -

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

Próbka build.gradle plik, jak pokazano poniżej, pokazuje różne opcje konfiguracji.

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

Możesz użyć następującej składni polecenia, aby wykonać pewne zadanie testowe.

gradle <someTestTask> --debug-jvm