Napisałem prostą metodę testową z JUnit 5:
public class SimlpeTest {
@Test
@DisplayName("Some description")
void methodName() {
// Testing logic for subject under test
}
}
Ale kiedy biegam mvn test
, mam:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running SimlpeTest
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
Jakimś cudem na pewno nie rozpoznał tej klasy testowej. Mój pom.xml
wygląd wygląda tak:
<properties>
<java.version>1.8</java.version>
<junit.version>5.0.0-SNAPSHOT</junit.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit5-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>snapshots-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
Masz pomysł, jak to działa?
Odpowiedzi:
Na
maven-surefire-plugin
dzień dzisiejszy nie ma pełnego wsparcia JUnit 5 . Istnieje otwarty problem dotyczący dodania tej obsługi w SUREFIRE-1206 .W związku z tym musisz użyć niestandardowego dostawcy . Jeden został już opracowany przez zespół JUnit; z przewodnika użytkownika , musisz dodać
junit-platform-surefire-provider
dostawcę iTestEngine
implementację dla nowego API:Pamiętaj też, aby zadeklarować
junit-jupiter-api
zależność z zakresemtest
:źródło
maven-surefire-plugin v2.21.0
działa dobrze zjunit-jupiter-engine v5.2.0
ijunit-platform-surefire-provider v1.2.0
Zaktualizuj 2
Problem został rozwiązany w wersji 2.22.0 Maven Surefire Plugin
Nowa wersja jest dostępna w Maven Central Repository.
Maven
Gradle
Aktualizacja
Jak zauważył Marian , najnowsza wersja JUnit 5 Platform Surefire Provider (1.2.0) obsługuje najnowszą wersję wtyczki Maven Surefire (2.21.0) :
Przykład
pom.xml
TestScenario.java
Wyjście (mvn clean install)
Najprostszy sposób do dziś:
źródło
Z dokumentacji JUnit 5 :
Dodatkowo w
maven-surefire-plugin
dokumentacji możesz przeczytać :To wystarczy, aby uruchomić testy JUnit 5:
Na mojej przestrzeni GitHub dodałem działający przykładowy projekt maven, który możesz przeglądać / klonować.
URL: https://github.com/ebundy/junit5-minimal-maven-project
źródło
Natknąłem się na ten problem z JUnit5 i Mavenem, ale zauważyłem również, że nawet jeśli jako zależność dodany zostanie tylko silnik junit-jupiter-engine, testy będą działać na niektórych projektach, a nie na innych . I widzę ten sam wzór w komentarzach tutaj: W komentarzu @Alex powyżej widać, że nie ma żadnego problemu, nawet z wcześniejszymi wersjami surefire / junit / platform.
Po pewnym czasie drapania się po głowie zdałem sobie sprawę, że te projekty, w których testy nie zostałyby wykonane, to te, w których nazwa metody testów nie zawiera słowa „test”. Chociaż nie jest to wymagane przez http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
Innymi słowy: tylko z
to
NIE zostanie uruchomiony, natomiast
BĘDZIE biegać!
Ten problem rozwija się jako rosyjska lalka ...
W każdym razie +1 dla @Mikhail Kholodkov, którego zaktualizowana odpowiedź rozwiązuje wszystkie problemy naraz!
źródło
Napotkałem ten sam problem w sierpniu 2019 r., O który tutaj zapytałem: Maven po cichu nie znajduje testów JUnit do uruchomienia . Te odpowiedzi poprowadziły mnie we właściwym kierunku, ale stwierdziłem, że możesz rozwiązać problem jeszcze bardziej zwięźle. Skopiowałem moje rozwiązanie z przykładowego projektu Maven JUnit5 .
Począwszy od JUnit 5.5.1 i
maven-surefire-plugin
2.22.2, nie musisz dodawaćjunit-platform-surefire-provider
zależności. Wystarczy mieć tę jedną zależność i jedną wtyczkę określoną wpom.xml
:źródło
Dla uzupełnienia, działa również pewna wersja 2.22.0 + junit 5.2.0 + platforma 1.2.0. W załączeniu roboczy pompon dla Twojej referencji:
źródło
junit-vintage-engine
jako zależności, a wszystkie moje testy zostały napisane dla JUnit 4.W moim przypadku było to spowodowane TestNG w ścieżce klas ( SUREFIRE-1527 ). Groovy 2.5.5 POM przywiózł go z
groovy-testng
modułem.Ręcznie określony dostawca platformy testowej (jak opisano na https://maven.apache.org/surefire/maven-surefire-plugin/examples/providers.html ) rozwiązał problem:
źródło
<dependency>
w<dependencies>
przykładowy kod.Jest otwarta kwestia na pewno 2.20
Działa dla mnie z surfire 2.19 + junit-platform- * 1.0.3
źródło
Miałem podobny problem, który powodował, że Surefire rozpoznawał testy zerowe.
Mój problem okazał się związany z następującym (z dokumentacji JUnit 5.1.0 / maven ):
Próbowałem użyć najnowszych wersji Surefire (2.21.0) i junit-platform-surefire-provider (1.1.0) i nie działało (ani w Javie 8, ani w 9)
Powrót do Surefire 2.19.1 rozwiązał mój problem.
Zgodnie z tym problemem poprawka zostanie uwzględniona w wersji 1.2.0 junit-platform-surefire-provider (obecnie dostępna tylko jako SNAPSHOT).
źródło
Zauważyłem jedną rzecz, że udało mi się to uruchomić:
ClinicCalendarShould
nie wybiera nazwy mojej klasy testowejClinicCalendarTest
MUSI zostać odebrane przez mavenaTak więc, jeśli nie brakuje mi jakiejś konfiguracji, parametru lub czegokolwiek w wtyczce surefire, domyślnie musisz nazwać swoje klasy testowe XXXTest.
źródło
Aktualizacja w celu
maven-surefire-plugin:2.20
uruchomienia testów Junit5 bez problemu.Ale używam
M6
wersji na Junit5.źródło
W moim przypadku pewna wtyczka nie otrzymała poprawnej wersji z jupiter-engine / api. I to nawet jeśli uruchomiono Maven 3.6.1 und surefireplugin w wersji 2.22.2!
Teraz moja konfiguracja pewnej wtyczki wygląda następująco:
Co więcej, musiałem wymusić te wersje:
Wygląda na to, że 5.5.2 został połączony z niewłaściwą wersją platformy 1.3.2 zamiast 1.5.2 w moim przypadku.
Wszystkie testy JUnit5 są dostępne teraz. Nawet z 2.22.0 pewnej wtyczki tak się nie stało!
Mam nadzieję, że to pomoże ...
źródło
Miałem do czynienia z tym samym problemem
junit5
imaven-surefire
testy kończyły się niepowodzeniem. Jednakjunit4
działał dobrze. Poniższa kombinacja zadziałała u mnie, nie dodam wersjonowania. Służyjunit-bom
do zarządzania zależnościami. Za pomocąspring-boot
2.1.4
Upewnij się, że dokonałeś aktualizacji do najnowszej wersji eclipse
źródło