Problem
Za każdym razem, gdy uruchamiam test JUnit moich projektów (używając JUnit 5 z Javą 9 i Eclipse Oxygen 1.a) napotykam problem polegający na tym, że eclipse nie może znaleźć żadnych testów.
Opis
W konfiguracji uruchamiania eclipse nie może nawet znaleźć metody, która jest oznaczona adnotacją @Test, a zamiast tego pokazuje mi tylko „ (wszystkie metody) ”. Mam nadzieję, że poniższy obraz daje lepsze spojrzenie na moją konfigurację:
Wyjście konsoli:
java.lang.NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:31)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.base/java.lang.Class.newInstance(Unknown Source)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.core.LauncherFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 11 more
Czego próbowałem do tej pory
Już próbowałem
- aby usunąć folder testowy ze ścieżki budowania i dodać go ponownie.
- aby rozpocząć test od najechania kursorem na metodę z adnotacją @Test, a następnie kliknij „Uruchom jako test JUnit”.
- usuń JUnit z Buildpath i dodaj go ponownie
- uruchom ponownie zaćmienie
- Przeniosłem również cały projekt z jednej maszyny na inną i wypróbowałem go z dostarczoną tam instalacją eclipse
- aby zmienić nazwę metody badawczej.
- aby ponownie wpisać adnotację @Test
Niektóre z tych kroków można znaleźć tutaj , ale ostatecznie problem pozostał.
Odpowiedzi:
Ty wpadł Eclipse bug 525948 , która została już ustalona, a które zostaną opublikowane w nadchodzącym wydaniu Oxygen.3 (4.7.3), 21 marca 2018 r.
Aby obejść ten problem , umieść kod testowy w oddzielnym projekcie i dodaj testowany projekt do ścieżki modulepath, ale nie dodawaj a
module-info.java
do projektu testowego. Z nazewnictwem projektu, klasy i modułu powinno wyglądać mniej więcej tak:Zobacz także mój film, który przedstawia Javę 9 i JUnit 5 w Eclipse Oxygen.1a w akcji
źródło
module-info.java
). W Eclipse projekt Java ma jeden folder wyjściowy i dlatego może zawierać tylko jeden folder lub żadenmodule-info.java
. Ale możesz dodać moduły do ścieżki modularnej projektu, nawet jeśli projekt nie jest modułowy (nie mamodule-info.java
).Rozwiązałem problem, klikając prawym przyciskiem myszy test i wybierając „Uruchom konfiguracje” i zmieniając opcję „Test runner:” na „JUnit 4”, jak pokazano poniżej:
Przeprowadziłem test ponownie i zadziałał.
źródło
Mam ten sam problem z STS 3.9.1. Wygląda na to, że jest to błąd Eclipse, jednak aby to naprawić, możesz dodać testową zależność
junit-platform-launcher
do swojego projektu ( https://mvnrepository.com/artifact/org.junit.platform/junit-platform-launcher )Oto jak zrobiłem dla mojego projektu, który używa gradle:
dependencies { // other stuff here testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "5.${junit5MinorVersion}" testCompile group: 'org.junit.platform', name: 'junit-platform-launcher', version: "1.${junit5MinorVersion}" }
Plik gradle.properties:
junit5MinorVersion=1.0
Uważam, że to samo dotyczy sytuacji, gdy widzisz ten wyjątek podczas korzystania z IntelliJ IDEA.
źródło
build.gradle
. Jeśli używasz maven, to jestpom.xml
. Jednak format maven jest inny.W moim przypadku problemem byłam ja, a nie IDE takie jak Eclipse. Zaimportowałem klasę JUnit 4 Test.
Więc NIE importuj tego:
import org.junit.Test // JUnit 4
Ale zaimportuj to:
import org.junit.jupiter.api.Test // JUnit 5
źródło
Dotychczasowe odpowiedzi nie dotyczyły problemu udostępniania kodu innym osobom, które niekoniecznie używają Eclipse. Oto jedna propozycja. Kluczem jest użycie profilu mavena do rozwiązania sprawy Eclipse.
Zakłada się, że zdefiniowałeś właściwość
junit5.version
w swoim pom, na przykład:<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit5.version>5.1.1</junit5.version> </properties>
następnie w
profiles
sekcji dodaj:<profiles> <profile> <id>eclipse</id> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit5.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.1.1</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> </profile> </profiles>
Następnie wystarczy wybrać profil w swoim lokalnym Eclipse: Kliknij prawym przyciskiem myszy swój projekt i wybierz
Maven > Select Maven Profiles...
(lub naciśnij Ctrl+ Alt+ P), a następnie zaznacz utworzony przez nas profil „eclipse”.To wszystko. Twoje Eclipse przeprowadzi testy Junit 5 zgodnie z oczekiwaniami, ale dodana konfiguracja nie zanieczyszcza innych kompilacji ani innego środowiska IDE
źródło
Dodanie tej zależności maven za pomocą JUnit Jupiter (v.5.5.1) rozwiązuje problem.
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.5.1</version> <scope>test</scope> </dependency>
źródło
PROSTA POPRAWKA: (Dodaj bibliotekę JUnit 5)
INSTRUKCJE:
źródło
Żadne z rozwiązań nie pomogło:
Problem w tym, że Eclipse 2018-12 ma wsparcie dla JUnit 5.3.1. Jeśli uruchomisz go z wcześniejszą wersją, zakończy się niepowodzeniem.
Więc upewnij się, że używasz co najmniej 5.3.1.
5.4.0 też działa.
W przypadku, gdy Twoim rodzicielskim pom jest Spring Boot, musisz upewnić się (w zarządzaniu zależnościami), że junit-jupiter-api jest ustawiony na tę samą wersję. Nie potrzebujesz junit-platform-runner ani -launcher !
źródło
<junit-jupiter.version>5.4.1</junit-jupiter.version>
aby zastąpić wersję używaną w Spring boot (2.1.3.RELEASE).Zgodnie z odpowiedzią Andrii Karaivanskyi, oto deklaracja Maven POM:
<properties> ... <junit-jupiter.version>5.2.0</junit-jupiter.version> <junit-platform.version>1.2.0</junit-platform.version> ... </properties> <dependencies> ... <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency> ... </dependencies>
AKTUALIZACJA
Zgodnie z komentarzem Alexandra Wessela możesz użyć org.junit: junit-bom, jak opisano w jego odpowiedzi na pytanie Eclipse Nie znaleziono testów przy użyciu JUnit 5 spowodowanych przez NoClassDefFoundError dla LauncherFactory .
źródło
scope=import type=pom
, a następnie dodaj zależności do junit-platform-launcher i junit-jupiter-engine w zakresie testowym, bez podawania wersji w sekcji zależności. BOM zawsze zapewni, że masz tylko jedną wersję platformy JUnit i Jupitera na ścieżce klas oraz że odpowiednie wersje są zgodne z przeznaczeniem (np. 5.2.0 z 1.2.0).Do Twojej wiadomości, kolejną przyczyną „Nie znaleziono testów przy użyciu junit5” jest (nieumyślnie lub celowo) deklarowanie przypadków testowych jako „prywatnych”:
// Example of test case that doesn't get included @Test private void testSomeMethod() { }
Muszą być publiczne.
źródło
Spotkałem się również z tym samym problemem, który wystarczy dodać bibliotekę, Junit Library jest już dostarczana wraz z Eclipse, więc wystarczy wykonać poniższe czynności
Ścieżka budowania> Konfiguruj ścieżkę budowania> biblioteka> Dodaj bibliotekę> JUnit> Dalej> zakończ
Mi to pasuje
źródło
Od początku komunikat o błędzie informuje, że klasa nie została znaleziona:
NoClassDefFoundError
oznacza to, że problem stanowi PATH do junit.Naciśnij prawy przycisk myszy, aby przejść do folderu projektu i wybierz opcję Właściwości LUB wybierz folder projektu i naciśnij kombinację cmd + i.
wybierz z listy „Java Build Path”.
To wszystko. Spróbuj ponownie uruchomić test.
źródło
powinieneś to wiedzieć :
@Before from junit4 idzie z @Test: " import org.junit.Test "
I
@BeforeEach z Junit5 idzie z: „ import org.junit.jupiter.api.Test ”
więc upewnij się, że używasz importu z tej samej wersji Junita, w przeciwnym razie myślę, że nie zadziała.
źródło
Używając STS 3.9.1 mam ten sam problem. Jednak obecnie nie potrzebuję żadnych nowych funkcji JUnit5, więc próbowałem wymusić użycie starszej wersji. Jeśli używasz maven, możesz dodać następujące zależności do swojego pom.xml:
To załatwiło sprawę (przynajmniej tak długo, jak nie potrzebuję jawnie JUnit5).
źródło
Ten sam problem mam po utworzeniu nowego TestCase: Eclipse -> New -> JUnit Test Case. Tworzy klasę bez modyfikatora poziomu dostępu. Mogę rozwiązać problem, umieszczając po prostu public przed słowem kluczowym class .
źródło
Jak wszyscy informowali, że to błąd IDE, spróbowałem
Eclipse
iSTS
. W obu przypadkach zawodzi.W ramach obejścia naprawiłem, modyfikując plik pom.xml, jak poniżej.
Dodałem te dwie zależności maven
junit-jupiter-engine
ijunit-platform-launcher
.pom.xml
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform launcher --> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency> </dependencies>
Upewnij się również, że w tagu properties dodano wersję obu zależności maven.
<properties> <java.version>1.8</java.version> <junit-jupiter.version>5.2.0</junit-jupiter.version> <junit-platform.version>1.2.0</junit-platform.version> </properties>
źródło
Używam Eclipse 2019-09.
Musiałem zaktualizować wersję junit-bom do co najmniej 5.4.0. Wcześniej miałem 5.3.1 i to spowodowało te same objawy PO.
Moja konfiguracja to teraz:
<dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.5.2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
źródło
Ponieważ nie jest możliwe umieszczanie bloków kodu w komentarzach, oto szablon POM, którego używam w projektach wymagających JUnit 5. Pozwala to na budowanie i „uruchamianie jako JUnit Test” w Eclipse i budowanie projektu w zwykłym Maven.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>group</groupId> <artifactId>project</artifactId> <version>0.0.1-SNAPSHOT</version> <name>project name</name> <dependencyManagement> <dependencies> <dependency> <groupId>org.junit</groupId> <artifactId>junit-bom</artifactId> <version>5.3.1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <scope>test</scope> </dependency> <dependency> <!-- only required when using parameterized tests --> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
Widzisz, że teraz musisz zaktualizować wersję tylko w jednym miejscu, jeśli chcesz zaktualizować JUnit. Ponadto numer wersji platformy nie musi pojawiać się (w kompatybilnej wersji) w dowolnym miejscu w POM, jest on automatycznie zarządzany poprzez
junit-bom
import.źródło
Używam:
Spring Tool Suite 4 Wersja: 4.4.2.RELEASE identyfikator kompilacji: 201911201053 Wersja Java: 1.8.0_191
a wyświetlany komunikat to Nie znaleziono testów z programem uruchamiającym testy „JUnit5”
co mi zadziałało to konfiguracja poniżej
<properties> <java.version>1.8</java.version> <junit-jupiter.version>5.5.2</junit-jupiter.version> <junit-platform.version>1.5.2</junit-platform.version> </properties> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit-jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>${junit-platform.version}</version> <scope>test</scope> </dependency>
źródło
Brakuje programu uruchamiającego platformę JUnit 5 z grupą: „org.junit.platform”, nazwa: „junit-platform-launcher”
Po prostu dodaj swój POM:
źródło
Ten sam błąd napotkałem w wersji zaćmienia Oxygen.3a Release (4.7.3a). Wystąpił problem z niezgodnością Maven Dependencies.Aby rozwiązać, zaktualizowałem plik Pom.xml o następujące zależności.
http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0 com.netapp.junitnmactiopractice JunitAndMactioPractice 0.0.1-SNAPSHOT
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <junit.jupiter.version>5.1.1</junit.jupiter.version> <junit.platform.version>1.1.1</junit.platform.version> </properties> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.jupiter.version}</version> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-runner</artifactId> <version>${junit.platform.version}</version> <scope>test</scope> </dependency> </dependencies>
źródło
junit-platform-runner
: „ Runner do wykonywania testów i zestawów testów na platformie JUnit w środowisku JUnit 4 ” .Można używać tylko
junit-jupiter
jako zależność testowej zamiastjunit-jupiter-api
,junit-platform-launcher
,junit-jupiter-engine
.<dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.5.2</version> <scope>test</scope> </dependency>
źródło
U mnie skonfigurowałem ścieżkę kompilacji, aby dodać bibliotekę JUnit 5, a także przez dodanie zależności
<dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-launcher</artifactId> <version>1.1.0</version> <scope>test</scope> </dependency>
oddzielnie.
źródło
Napotkałem ten problem również z Eclipse (wersja: 2019-12 (4.14.0)). Wydaje się, że rozwiązanie wykorzystuje IntelliJ lub test Maven do uruchamiania takich testów w Eclipse.
źródło
Właściwie użyłem spring-tool-suite-4-4.5.1 i miałem ten błąd, gdy chciałem uruchomić klasę testową. a rozwiązaniem było dodanie do „ścieżki budowania java”, „junit5” w Bibliotekach ścieżki budowania java img
źródło
powinieneś się zmienić
@Test public static void testmethod(){}
do
@Test public void testmethod(){}
@Test nie obsługuje statycznej metody
źródło
Napotkałem ten sam błąd, aw moim przypadku była to prosta sprawa przejścia do
Project Properties > Maven > Update project
i / lub czyszczenia i przebudowy projektu.źródło
Właśnie dodałem mój Test.class za pośrednictwem menu zaćmienia i działało. Kliknij prawym przyciskiem myszy projekt -> Nowy -> Inne -> JUnit -> JUnit Test Case
źródło
Może to być spowodowane wersją junit-platform-launcher / junit-platform-runner.
1.1.0 nie działa
1.4.1 działa w mojej konfiguracji.
Myślę, że jest to błąd w eclipse, ponieważ działa z bibliotekami wyższych wersji junit, a nie inną wersją.
To rozwiązało mój problem. Drugie rozwiązanie wydawało mi się mniej wykonalne lub ryzykowne. Dzięki.
źródło
Kiedy zmieniłem moją wersję Jupiter API na najnowszą, problem został rozwiązany. W międzyczasie moje eclipse i inne idi rozszerzenia eclipse (takie jak STS) otrzymują błąd ścieżki kompilacji. Przy każdej aktualizacji mavena ide zmusza mnie do ustawienia biblioteki systemowej JRE.
źródło