Giriş
Açıklaması şöyle. Birim testlerini (Unit Test) çalıştırır.
Açıklaması şöyle. Birim testlerini (Unit Test) çalıştırır.
maven-surefire-plugin is designed for running unit tests and if any of the tests fail then it will fail the build immediately.
Hangi Sınıfları Koşturur
Açıklaması şöyle. Yani test dosyasının ismine bakarak seçer. Test sınıfının isminin FooTest şeklinde olması yeterli.
According to the documentation, the plugin will run every test class with the following name patterns:**/Test***/*Test**/*Tests**/*TestCas
This is the only criteria the plugin follows in order to run the test. Should you create a test class with a different name pattern, it will be ignored, so be careful.
Goals
Bu plugini çalıştırmak için şöyle yaparız. Aslında test phase'den sonra gelen herhangi bir başka phase yani install, verify gibi bir şey de belirtilebilir
mvn clean test
test goal
Örnek
Şöyle yaparız. Fully qualifed test sınıf ismi çift tırnak içinde olmalı
# compile src and test and run the given test mvn test -Dtest="com.foo.FooTest" # run only the given test mvn surefire:test -Dtest="com.foo.FooTest"
surefire vs failsafe
For integration tests, you should use the Maven Failsafe Plugin. It runs after the jar in target is created,....
surefire mvn test ile çalıştırılır
failsafe mvn verify ile çalıştırılır
1. Jacoco İle Birlikte Kullanım
Örnek
Şöyle yaparız. Burada @{argLine} kullanılarak, jacoco plugin çalıştırılırken geçilen parametreler geliyor.
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><printSummary>true</printSummary><runOrder>random</runOrder><argLine>@{argLine}</argLine></configuration></plugin>
Örnek
Şöyle yaparız. Burada jacocoArgline parametresi jococo plugin içinde tanımlı. Onu surefire'da da kullanıyoruz
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M4</version>
<configuration>
<argLine>${jacocoArgLine}</argLine>
<reportsDirectory>${project.test.result.directory}/surefire</reportsDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
<executions>
<execution>
<id>pre-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>jacocoArgLine</propertyName>
<destFile>${project.test.result.directory}/jacoco/jacoco.exec</destFile>
</configuration>
</execution>
<execution>
<id>post-test</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${project.test.result.directory}/jacoco/jacoco.exec</dataFile>
<outputDirectory>${project.test.result.directory}/jacoco</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
2. Paralel Kullanım
surefire plugin testleri teker teker koşturur. Bunu da paralel hale getirmek mümkün. Açıklaması şöyle
For JUnit 4.7 and onwards, this may be methods, classes, both, suites, suitesAndClasses, suitesAndMethods, classesAndMethods or all.
Örnek
Şöyle yaparız. Burada testleri paralel koşmasını ve 16 thread kullanmasını istiyoruz
mvn test -Dparallel=all -DperCoreThreadCount=false -DthreadCount=16
skipTests Kullanımı
Açıklaması şöyle. Yani testleri derlemek ve koşturmak arasında fark var.
mvn clean install -DskipTests=true will just skip the Tests Execution
mvn clean install -Dmaven.test.skip will skip both compilation and execution of Tests.
Örnek
3. Unit Test + Integration Test İçin Kullanım
Örnek
Şöyle yaparız
<profiles>
<profile>
<id>unit-test</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/Test*.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>integration-test</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/IntegrationTest*.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Çalıştırmak için şöyle yaparız
// profile name is unit-test for unit tests
mvn test -Punit-test
// profile name is integration-test for integration tests
mvn test -Pintegration-test
4. configuration Başlığı Altındaki Tag'ler
environmentVariables ve systemPropertyVariables
Örnek
Şöyle yaparız
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<environmentVariables>
<TESTCONTAINERS_RYUK_DISABLED>${containers.stayup}</TESTCONTAINERS_RYUK_DISABLED>
</environmentVariables>
<systemPropertyVariables>
<service.name>schema-registry-demo-service</service.name>
...
</systemPropertyVariables>
</configuration>
</plugin>
forkCount Tag
Örnek
Bir ara şöyle bit hata alıyordum "Error occurred in starting fork, check output in log". Düzeltmek için
şöyle yaparız
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <skipTests>false</skipTests> <testFailureIgnore>true</testFailureIgnore> <forkCount>0</forkCount> </configuration> </plugin>
groups Tag- Anotasyona Göre Test Seçmek İçindir
@Category(...) anotasyonuna göre seçim yaparak sadece belli testlerin koşmasını sağlar.
Örnek
Şöyle yaparız. test.categories değişkeni testte kullanılan anotasyonun full ismini belirtir.
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.0</version><configuration><groups>${test.categories}</groups></configuration></plugin>
Örneğin com.hcd.testcategories.config.IntegrationTestsi simli bir arayümüz olsun. Testte şöyle yaparız
@Category(IntegrationTests.class)public class FooIntegrationTest {@Testpublic void bar() {...}}
includes Tag - Dosya İsmi
Örnek
Şöyle yaparız.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<includes>
<include>**/*Runner.java</include>
</includes>
<testFailureIgnore>true</testFailureIgnore>
<reportsDirectory>./target/test-output/${timestamp}</reportsDirectory>
</configuration>
</plugin>
Örnek - Unit ve Integration Test Ayrımı
Sadece Unit Test'leri çalıştırıp, Integration Test'leri es geçmek için şöyle yaparız
<plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.0</version><configuration><includes><include>**/*Test.java</include></includes><excludes><exclude>**/*Integration.java</exclude></excludes></configuration></plugin>
includeTags Tag
JUnit 5 @Tag veya JUnit 4 @Category işaretine sahip testleri çalıştırır
Örnek
Şöyle yaparız
@Tag("annotations")@Tag("junit5")public class AnnotationTestExampleTest {...}
Daha sonra maven surefire plugin ile hangi @Tag anotasyonlarının seçileceğine karar verebiliriz. Şöyle yaparız
<plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <properties> <includeTags>junit5</includeTags> </properties> </configuration> </plugin>
excludes Tag - Dosya İsmi
Belirtilen dosya ismi örüntüsüne uyan testleri çalıştırmaz
Örnek
Şöyle yaparız. <!-- excludes tests that require application -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/TomcatPingTest.java</exclude>
</excludes>
</configuration>
</plugin>
reportFormat Tag
Örnek
Şöyle yaparız. Böylece test isimlerini de göster.
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M7</version>
<configuration>
<reportFormat>plain</reportFormat>
<consoleOutputReporter>
<disable>true</disable>
</consoleOutputReporter>
</configuration>
</plugin>
testFailIgnore Tag
Birim test başarısız olsa bile jar çıktısı üretir.
Örnek
Bir ara şöyle bit hata alıyordum "Error occurred in starting fork, check output in log". Düzeltmek için şöyle yaparız
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <skipTests>false</skipTests> <testFailureIgnore>true</testFailureIgnore> <forkCount>0</forkCount> </configuration> </plugin>
Örnek
Şöyle yaparız.
useSystemClassLoader Tag
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
useFile Tag
Açıklama yaz
Örnek
Şöyle yaparız.
Şöyle yaparız.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
Hiç yorum yok:
Yorum Gönder