JUnit java.lang.NoSuchMethodError:junit.framework.ComparisonFailure.getExpected()Ljava / lang / String

时间:2010-10-25 21:27:53

标签: java unit-testing junit

我从之前成功运行的测试用例中获得以下异常,但现在它抛出此异常:

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跑步者的内部问题。

7 个答案:

答案 0 :(得分:21)

getExpected()上的junit.framework.ComparisonFailure方法仅在JUnit 3.8.2中添加(请记住,junit.framework包来自JUnit 3.8,而JUnit 4使用org.junit)。 3.8.1中没有这个方法,这是3.x的最常见版本。

我认为添加该方法是为了更容易迁移到JUnit 4工具,偶尔会在使用JUnit 3.8的旧代码库中弹出此异常。在运行JUnit 3.8测试时,Eclipse JUnit 4测试运行器似乎会切换回调用junit.framework.*代码。

所以我猜你还有JUnit 3.8.1潜伏在你的类路径上,并且它与Eclipse测试运行器发生了冲突。要么摆脱那个JAR,要么“升级”到3.8.2。

答案 1 :(得分:12)

如果你正在使用JUnit 4但是从旧的Assert包中导入junit.framework类(而不是新的org.junit包),也会发生这种情况

检查您的导入和静态导入 - 我的罪魁祸首是import static junit.framework.Assert.assertEquals;

答案 2 :(得分:7)

在eclipse中运行我的测试类时,我发生了同样的错误,但我的解决方案略有不同。

我的设置是我在类路径中有junit-4.10 jar但我的测试类使用的是junit 3,只有在assertEquals方法失败时才会发生异常。

问题是eclipse仍在使用junit 4 runner,所以我通过编辑配置(在eclipse中选择“Run Configuration”,然后选择测试类,然后在下拉列表中更改“Test Runner”)来更改它“JUnit 4”到“JUnit 3”)。

答案 3 :(得分:3)

我的案例中的问题是junit-4.5.jar直接作为库添加到项目中。

我的解决方案是从Eclipse项目中删除对junit jar的依赖,并依赖于JUnit插件库。那个是自动添加的,或者可以通过单击项目库屏幕上的添加库按钮手动添加。

那个从插件中获取JUnit并且有类似的引用:

.../Eclipse/plugins/org.junit_4.12.0.v201504281640 

还需要在“订单和导出”选项卡中将JUnit库移动到列表顶部。选中导出复选框是不必要的。

答案 4 :(得分:1)

我也遇到了问题,但那是因为我使用的是JUnit 4.1。我切换到4.4,问题就消失了。

答案 5 :(得分:0)

升级到Kepler版本的Eclipse后,我才遇到问题。如果我运行“全部”测试,测试运行正常。但是当我运行单个方法测试时,它会因此错误而失败。

我找到了这个答案,并认为我将在这里分享它以帮助其他人。它的长短是升级到Junit 4.4或更高

https://www.gotraveltech.com/confluence/display/COOK/My+Eclipse向下滚动到“如何在MyEclipse中运行单独的JUnit 4.x.x测试?”

答案 6 :(得分:0)

在这种情况下,检查依赖项和导入的库版本效率最高。

例如,@Test注释可以从org.junit.Test而不是@org.testng.annotations.Test导入。对于Android项目,可能会导致如下错误:

  

线程中的异常" main" java.lang.NoSuchMethodError:...