JUnit java.lang.NoSuchMethodError: junit.framework.ComparisonFailure.getExpected()Ljava/lang/String
我从之前成功运行的测试用例中获得以下异常,但现在它抛出此异常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | java.lang.NoSuchMethodError: junit.framework.ComparisonFailure.getExpected()Ljava/lang/String; at org.eclipse.jdt.internal.junit4.runner.JUnit4TestListener.testFailure(JUnit4TestListener.java:63) at org.junit.runner.notification.RunNotifier$4.notifyListener(RunNotifier.java:100) at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:41) at org.junit.runner.notification.RunNotifier.fireTestFailure(RunNotifier.java:97) at org.junit.internal.runners.JUnit38ClassRunner$OldTestClassAdaptingListener.addError(JUnit38ClassRunner.java:41) at org.junit.internal.runners.JUnit38ClassRunner$OldTestClassAdaptingListener.addFailure(JUnit38ClassRunner.java:64) at junit.framework.TestResult.addFailure(TestResult.java:46) at junit.framework.TestResult.runProtected(TestResult.java:127) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 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) |
谁知道是什么原因导致的? 这似乎是JUnit运行器的内部问题。
我认为添加该方法是为了更容易迁移到JUnit 4工具,偶尔会在使用JUnit 3.8的旧代码库中弹出此异常。在运行JUnit 3.8测试时,Eclipse JUnit 4测试运行器似乎会切换回调用
所以我猜你还有JUnit 3.8.1潜伏在你的类路径上,并且它与Eclipse测试运行器发生了冲突。要么摆脱那个JAR,要么"升级"到3.8.2。
如果您正在使用JUnit 4但是从旧的
检查你的导入和静态导入 - 我的罪魁祸首是
在eclipse中运行我的测试类时,我发生了同样的错误,但我的解决方案略有不同。
我的设置是我在类路径中有junit-4.10 jar,但我的测试类使用的是junit 3,只有在assertEquals方法失败时才会发生异常。
问题是eclipse仍在使用junit 4 runner,所以我通过编辑配置(在eclipse中选择"Run Configuration",然后选择测试类,然后在"JUnit 4"的下拉列表中更改"Test Runner"来更改它)"到"JUnit 3")。
我的问题是junit-4.5.jar直接作为库添加到项目中。
我的解决方案是从Eclipse项目中删除对junit jar的依赖,并依赖于JUnit插件库。可以通过单击项目库屏幕上的"添加库"按钮自动添加或手动添加。
那个从插件中获取JUnit并有一个类似于这样的引用:
1 | .../Eclipse/plugins/org.junit_4.12.0.v201504281640 |
还需要在"顺序和导出"选项卡中将JUnit库移动到列表顶部。选中导出复选框不是必需的。
我也遇到了问题,但那是因为我使用的是JUnit 4.1。我切换到4.4,问题就消失了。
在这种情况下,检查依赖项和导入的库版本是最有效的。
例如,
Exception in thread"main" java.lang.NoSuchMethodError: ...
升级到Kepler版本的Eclipse后,我才遇到问题。如果我运行"全部"测试,测试运行正常。但是当我运行单个方法测试时,它会因此错误而失败。
我找到了这个答案,并认为我将在这里分享它以帮助其他人。它的长短是升级到Junit 4.4或更高
https://www.gotraveltech.com/confluence/display/COOK/My+Eclipse向下滚动到"如何在MyEclipse中运行单独的JUnit 4.x.x测试?"