Otrzymuję ten błąd w Javie w moim kodzie testu junit. Spojrzałem na sieć i powiedział, że muszę dodać junit.jar w ścieżce klas.
W Eclipse dodałem go w ścieżce klas okien właściwości projektu, ale nadal otrzymuję błąd inicjalizacji. Co powinienem zrobić..?
Oto pełny ślad błędu:
java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:32)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:41)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:31)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 25 more
java
eclipse
junit
noclassdeffounderror
Chris Dennett
źródło
źródło
Odpowiedzi:
źródło
Dodatek: Lokalnie utworzyłem „Bibliotekę użytkownika” i dodałem do moich projektów, która ma
źródło
Ten sam problem może wystąpić, jeśli pobrałeś JUnit jar ze strony internetowej JUnit, ale zapomniałeś pobrać słoik Hamcrest - oba są wymagane (instrukcje mówią, aby pobrać oba, ale przeskoczyłem dalej! Ups)
źródło
Używając w Maven, zaktualizuj artefakt junit: junit z np. 4.8.2 do 4.11.
źródło
NoClassDefFoundError: org/junit
...caused by ClassNotFoundException: org.junit.runners.model.InitializationError
dla mnie. Używałem Junit 4.8. Przejście do 4.11 zadziałało.W Eclipse udało mi się rozwiązać powyższy problem, wykonując poniższe czynności:
Kliknij prawym przyciskiem myszy plik testowy, który chcesz uruchomić, wybierz Uruchom jako -> Uruchom konfiguracje -> Wybierz kartę Ścieżka klasy -> Wybierz do pozycji startowej -> Wybierz Zaawansowane -> Wybierz Dodaj bibliotekę -> Wybierz JUnit -> Dalej -> Wybierz JUnit4 z menu rozwijanego -> Zakończ
Następnie wybierz Zastosuj -> Uruchom
źródło
Klasa org / hamcrest / SelfDescribing nie znajduje się w ścieżce klas czasu wykonywania.
źródło
Te kroki zadziałały dla mnie, gdy błąd pokazał, że brakuje klasy Filter (jak zgłoszono w tym fałszywie dyplomowanym pytaniu: JUnit: NoClassDefFoundError: org / junit / runner / manipulation / Filter ):
Dzięki tym odpowiedziom za podpowiedź do tego rozwiązania: https://stackoverflow.com/a/34067333/5538923 i https://stackoverflow.com/a/39987979/5538923 ).
źródło
Spróbuj wykonać poniższe kroki:
U mnie to zadziałało.
źródło
Miałem ten sam problem, problem był w @ContextConfiguration we mnie klasach testowych, ładowałem też kontekst serwletu, po prostu zmieniam:
@ContextConfiguration(locations = { "classpath*:**\*-context.xml", "classpath*:**\*-config.xml" })
do:
@ContextConfiguration(locations = { "classpath:**\*-context.xml", "classpath:**\*-config.xml" })
i to wszystko. w ten sposób im tylko ładuję wszystkie pliki ze wzorcem * -context.xml w mojej ścieżce testowej.
źródło
źródło
Powodem tego jest to, że słoik "hamcrest-core" nie znajduje się w ścieżce klas, ponieważ nie jest dostarczany bezpośrednio z słoikiem junit. Istnieją więc dwa sposoby rozwiązania tego problemu:
źródło
Dodanie moich dwóch centów do innych odpowiedzi.
Sprawdź, czy przypadkiem nie utworzyłeś swojej klasy testowej pod,
src/main/java
zamiast zwyklesrc/test/java
. Pierwsza z nich jest domyślna w Eclipse podczas tworzenia nowej klasy testowej z dowolnego powodu i może zostać przeoczona. To może być takie proste.źródło
W moim przypadku dodałem swoje biblioteki do Modulepath zamiast w Classpath.
Działa tylko wtedy, gdy JUnit jest poprawnie dodany do Classpath.
źródło
Ten błąd pojawia się również, jeśli w ścieżce klas znajdują się dwie wersje hamcrest-library lub hamcrest-core.
W pliku pom możesz wykluczyć dodatkową wersję i działa.
źródło
nawet Junit4.11.jar nie ma hamcrest-core.jar. Dodałem wyraźnie w ścieżce klas i problem został rozwiązany.
źródło
Śledziłem ten film: https://www.youtube.com/watch?v=WHPPQGOyy_Y, ale nie udało mi się uruchomić testu. Następnie usunąłem wszystkie pobrane pliki i dodałem Junita, wykonując krok na obrazku.
źródło
Jeśli masz więcej niż jedną wersję Java, może to kolidować z programem.
Proponuję pobrać JCreator.
Gdy to zrobisz, kliknij konfiguruj, opcje i profile JDK. Usuń stare wersje oprogramowania Java z listy. Następnie kliknij przycisk odtwarzania. Twój program powinien się pojawić.
Jeśli tak się nie stanie, naciśnij ctrl + alt + O, a następnie ponownie naciśnij przycisk odtwarzania.
źródło