java.lang.NoClassDefFoundError w junit

82

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
Chris Dennett
źródło
1
Jakiej klasy brakuje według błędu?
BalusC

Odpowiedzi:

105
  1. Kliknij prawym przyciskiem myszy projekt w Eksploratorze pakietów> kliknij Właściwości
  2. przejdź do ścieżki budowania Java> zakładka Biblioteki
  3. kliknij przycisk „Dodaj bibliotekę”
  4. wybierz JUnit
  5. Kliknij Następny.
  6. wybierz z rozwijanego przycisku JUnit4 lub inne nowe wersje.
  7. kliknij zakończ.
  8. W takim razie w porządku.
Chris Dennett
źródło
Spowoduje to dodanie JUNIT do biblioteki, ale teraz mówi, że junit.org nie może zostać rozwiązany
5
Po prostu sprawdź dwukrotnie, czy masz bibliotekę Hamcrest również na ścieżce klas. Obecna wersja JUnit 4 powinna być w pełni dołączona, ale czasami ludzie dzielą pakiety.
Berin Loritsch
jak mam postępować, jeśli używam wiersza poleceń systemu Linux? gdzie dodać ten słoik?
vipin8169
Powyższe kroki działają poprawnie i pobiera jar z folderu wtyczek eclipse. Ale jeśli dodamy plik junit jar w konfiguracji ścieżki kompilacji jako zewnętrzny jar, powinien działać dobrze? to nie działało dla mnie
Vineeth Bhaskaran
20
  1. Eclipse -> Menu główne -> Uruchom -> Uruchom konfiguracje
  2. Usuń wszystkie wystąpienia swojego testu. Twój test może pojawić się jako YourTest.Method_1 (). Usuń to również.
  3. Ponowne odtworzenie. Pozwól Eclipse zbudować nową konfigurację.

Dodatek: Lokalnie utworzyłem „Bibliotekę użytkownika” i dodałem do moich projektów, która ma

hamcrest-core-1.3.jar

junit-4.12.jar

deepSymmetry
źródło
11

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)

Alex
źródło
10

Używając w Maven, zaktualizuj artefakt junit: junit z np. 4.8.2 do 4.11.

Opony
źródło
1
To naprawiło NoClassDefFoundError: org/junit... caused by ClassNotFoundException: org.junit.runners.model.InitializationErrordla mnie. Używałem Junit 4.8. Przejście do 4.11 zadziałało.
Alex
6

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

Sana Jahan
źródło
2

Klasa org / hamcrest / SelfDescribing nie znajduje się w ścieżce klas czasu wykonywania.

Thorbjørn Ravn Andersen
źródło
2

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

  1. Upewnij się, że odwołanie do JUnit 4 występuje tylko raz w Twoim projekcie (usunąłem również naturę Mavena, ale nie jestem pewien, czy ten krok ma wpływ na rozwiązanie problemu) .
  2. Kliknij prawym przyciskiem myszy plik zawierający testy jednostkowe, wybierz Właściwości, a następnie w ustawieniach Uruchom / Debuguj usuń wszystkie wpisy z Konfiguracji uruchamiania dla tego pliku. Kliknij Zastosuj i zamknij.
  3. Kliknij projekt prawym przyciskiem myszy zawierający testy jednostkowe, wybierz Właściwości, a następnie w ustawieniach Uruchom / Debuguj usuń wszystkie wpisy dotyczące JUnit z Konfiguracji uruchamiania. Kliknij Zastosuj i zamknij.
  4. Wyczyść projekt i uruchom test.

Dzięki tym odpowiedziom za podpowiedź do tego rozwiązania: https://stackoverflow.com/a/34067333/5538923 i https://stackoverflow.com/a/39987979/5538923 ).

marcor92
źródło
1

Spróbuj wykonać poniższe kroki:

  1. Przejdź do konfiguracji uruchamiania projektu. W zakładce Classpath dodaj bibliotekę JUnit.
  2. Ponów te same kroki.

U mnie to zadziałało.

Amit
źródło
1

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.

Defrag
źródło
1
  1. Upewnij się, że zmienna środowiskowa JUNIT_HOME jest ustawiona na c: \ JUNIT.
  2. następnie W konfiguracji uruchamiania> wybierz ścieżkę klasy> dodaj zewnętrzne pliki jar junit-4.11.jar
AnandSonake
źródło
1

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:

  1. wybierz projekt -> buildpath -> dodaj biblioteki i wybierz junit (zawiera junit i hamcrest-core)
  2. pobierz hamcrest-core z repozytorium maven i dodaj to do swojej ścieżki klas.
rishabhdaim
źródło
1

Dodanie moich dwóch centów do innych odpowiedzi.

Sprawdź, czy przypadkiem nie utworzyłeś swojej klasy testowej pod, src/main/javazamiast zwykle src/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.

zły biskup
źródło
1

W moim przypadku dodałem swoje biblioteki do Modulepath zamiast w Classpath.

Działa tylko wtedy, gdy JUnit jest poprawnie dodany do Classpath.

wprowadź opis obrazu tutaj

Daniel Cheung
źródło
0

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.

Ujjwal
źródło
0

nawet Junit4.11.jar nie ma hamcrest-core.jar. Dodałem wyraźnie w ścieżce klas i problem został rozwiązany.

Rohit Sharma
źródło
0

Ś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.

wprowadź opis obrazu tutaj

Woden
źródło
-1

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.

Kosz
źródło