Thursday, November 8, 2012

java.lang.ClassNotFoundException when running a JUnit test


If you get this error when running a JUnit 3 or 4 test in Eclipse:

java.lang.NoClassDefFoundError: <your unit test class name>
    at java.lang.ClassLoader.defineClass1(Native Method)
 ...
    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)

I've tried cleaning and building projects, restarting Eclipse and other suggested things to do in this case.

It turned out that errors in the project were responsible for that error. The project has another project with JRE specified incorrectly. As soon as I fixed this, unit test worked, even though the project still had some errors.