JUnit: NoClassDefFoundError: org/junit/runner/manipulation/Filter (Programare, Java, Junit)

lucian.marcuta a intrebat.

Atunci când încerc să execut niște teste unitare, se ridică următoarea eroare:

java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadTestLoaderClass(RemoteTestRunner.java:320)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:310)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:305)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:283)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:207)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:191)

Trebuie să menționez că junit-4.11.jar este adăugat la calea de construire a proiectului. Aveți vreo idee?

EDIT: Eu (Gábor Lipták) am citit cealaltă întrebare din care această întrebare ar trebui să fie un duplicat. Aceasta NU este un duplicat. Dacă cineva are Gradle Buildship ca plugin de construcție în Eclipse, exact această eroare este aruncată, dacă din greșeală puneți clasa de testare în main/resorces în loc de test/resources. Buildship pare să aibă grijă de test vs. compilare classpath, atunci când vine vorba de a genera o configurație de execuție. Consultați următoarele fragmente din aplicația mea .classpath de mai jos ca dovadă:

<classpathentry kind="src" output="bin/main" path="src/main/resources">
    <attributes>
        <attribute name="gradle_scope" value="main"/>
        <attribute name="gradle_used_by_scope" value="main,test"/>
    </attributes>
</classpathentry>

<classpathentry kind="src" output="bin/test" path="src/test/resources">
    <attributes>
        <attribute name="gradle_scope" value="test"/>
        <attribute name="gradle_used_by_scope" value="test"/>
    </attributes>
</classpathentry>

Comentarii

  • Nu sunt sigur că acesta este un duplicat exact, eroarea face referire la o clasă diferită și soluția nu a fost furnizată pe cealaltă pagină. –  > Por bwobbones.
  • aceasta nu ar trebui să fie marcată ca duplicat, deoarece în cealaltă întrebare mesajul de eroare arată clar că lipsește hamcrest, în timp ce în această întrebare mesajul de eroare ne spune că nu se poate găsi clasa Filter –  > Por coconut.
  • Bănuiesc că proiectul dvs. nu se bazează pe maven. Run -> Run Configurations Deschideți fila „Classpath”, faceți clic pe butonul „Advanced…” din stânga Selectați „Add Library” –> Junit Apoi, sub „User Entries”, veți vedea biblioteca Junit. –  > Por meadlai.
3 răspunsuri
mmwaikar

Chiar și eu mă confruntam cu aceeași problemă, așa că încercați pașii de mai jos –

  1. Faceți clic dreapta pe proiect în Package Explorer și faceți clic pe Properties.
  2. Faceți clic pe fila Libraries (Biblioteci).
  3. Faceți clic pe butonul Adăugare bibliotecă.
  4. Selectați JUnit și faceți clic pe Next (Următorul).
  5. Selectați JUnit 4 (asta este ceea ce folosesc eu).
  6. Faceți clic pe Terminare.
  7. Acum faceți clic dreapta pe fișierul care conține testele unitare și selectați Properties (Proprietăți).
  8. Sub Run/Debug settings (Setări de execuție/depanare), eliminați orice intrare din Launch Configurations (Configurații de lansare) pentru acel fișier. Apăsați ok.

Să sperăm că acum veți putea rula testele.

Comentarii

  • Pentru mine, a fost vorba mai ales de a doua parte, cu ștergerea Launch Configurations. Este posibil ca Junit să fie configurat diferit în Eclipse (proiect lib separat, dependență maven etc.) –  > Por Jur_.
  • Acest lucru nu a funcționat pentru mine – proiectul meu primește JUnit prin gradle și unit-4.12.jar este în calea de construire, inclusiv clasa Filter. Cred că aceasta ar putea fi o problemă ciudată a eclipsei. –  > Por coconut.
  • Pentru mine a fost o eroare de utilizator: Am plasat clasa de testare în src/main/java în loc de src/test/java. –  > Por Andy Brown.
  • Pentru mine este o eroare de sintaxă într-o dependență nou adăugată. Am corectat numele grupului/artifactului și totul a revenit la normal. La început nu a fost evident. –  > Por WesternGun.
  • Cred că pasul #8 este cel mai important, eliminarea vechii configurații de execuție a rezolvat o problemă similară pentru mine – -.  > Por Arun Y.
user_number153

această eroare poate fi cauzată de adăugarea bibliotecii JUnit la Modulepath și nu la Classpath.

în Eclipse, panoul din stânga „Package Explorer” faceți clic dreapta pe proiect, coborâți la proprietăți, apoi mergeți la „Java Build Path” Faceți clic pe „Classpath” NU pe „Modulepath” faceți clic pe „Add Library…”, apoi pe Junit.

Mike Nakis

În cazul meu, eroarea a avut aceeași urmă de stivă, (care se termina cu java.lang.Class.forName0(Native Method)), dar mesajul de eroare a fost diferit:

java.lang.VerifyError: (class: org/junit/runner/manipulation/Alphanumeric, method: create signature: (Lorg/junit/runner/manipulation/Ordering$Context;)Lorg/junit/runner/manipulation/Ordering;) Wrong return type in function

Cauza s-a dovedit a fi faptul că actualizasem JUnit de la 4.11 la 4.13.1, deoarece „dependabot” de la GitHub mi-a sugerat acest lucru, pe un proiect public al meu, și chiar a creat cereri de fuziune gata să le accept, iar eu m-am gândit „sigur, de ce nu, ce ar putea merge prost?”. Concluzie: nu aveți încredere în dependabotul lui GitHub.

Tags:,