Reputation: 1260
When I try to run some unit tests, the following error is raised:
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)
I have to mention that junit-4.11.jar is added to project build path. Any ideas?
EDIT: I (Gábor Lipták) have read the other question this question supposed to be a duplicate of. This is NOT a duplicate. If someone has Gradle Buildship as build plugin in Eclipse, exactly this error is thrown, if you mistakenly put your test class in
main/resorces
instead oftest/resources
. Buildship seems to take care of test vs. compile classpath, when it comes to generate a run configuration. See the following snippets of my.classpath
file below as evidence:
<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>
Upvotes: 24
Views: 74571
Reputation: 1
In my case it was just running a Maven update in Eclipse and then it worked again.
Upvotes: 0
Reputation: 535
Looks like this is a defect in eclipse, please update eclipse or eclipse based editor to fix this issue.
Please refer here for more details - https://bugs.eclipse.org/bugs/show_bug.cgi?id=525844
Upvotes: 0
Reputation: 61993
In my case the error had the same stack trace, (ending with java.lang.Class.forName0(Native Method)
) but the error message was different:
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
The cause turned out to be that I had upgraded JUnit from 4.11 to 4.13.1, because GitHub's "dependabot" suggested so, on some public project of mine, and even created merge requests ready for me to accept, and I thought "sure, why not, what could possibly go wrong?" Conclusion: don't trust GitHub's dependabot.
Upvotes: 1
Reputation: 562
this error can be caused by adding the JUnit library to Modulepath rather than Classpath.
in Eclipse the left most panel "Package Explorer" right click your project go down to properties then go to "Java Build Path" Click on "Classpath" NOT "Modulepath" click "Add Library..." then Junit.
Upvotes: 26
Reputation: 665
Even I was facing the same issue, so try the below steps -
Hopefully you'll be able to run the tests now.
Upvotes: 45