找不到SpringJUnit4ClassRunner.runleaf方法

时间:2018-05-18 08:04:11

标签: unit-testing spring-mvc junit ant junit4

使用ant脚本运行测试代码时出错。但是如果我通过 RUN AS - >分别使用eclipse运行testMethods。 JUNIT ,它会返回正确的答案。

java.lang.NoSuchMethodError: org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runLeaf(Lorg/junit/runners/model/Statement;Lorg/junit/runner/Description;Lorg/junit/runner/notification/RunNotifier;)V
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)

我正在使用 junit:4.12 spring-test:4.3.16.RELEASE 库。我已经搜索了解决方案但是每个解决方案都给我回答使用大于 junit:11 的junit版本。但我使用4.12但仍然出错。

1 个答案:

答案 0 :(得分:1)

问题是由pom依赖性引起的。无论您更改junit版本如何都行不通,因为在加载您在POM中明确定义的Junit依赖项之前,还有其他pom依赖项间接引入了旧的junit版本。要看到这一点,请输入SpringJUnit4ClassRunner类,然后输入其超类BlockJUnit4ClassRunner,您会发现它不位于您在POM中声明的junit jar包中。

因此,要解决此问题,您应该找出哪种pom依赖关系通过以下方式间接引入了您在第1段中找到的jar包: mvndependency:tree ,然后使用 exclusion 将其排除在相应的pom依赖项中,例如:
<ul class="waste"> <li id="waste_1" class="paper"></li> <li id="waste_2" class="bio"></li> </ul> <div class="trashcan"> <div id="bio" class="bio"></div> <div id="paper" class="paper"></div> </div>

现在,它应该可以正常工作了! (如果不需要,则可能需要 mvn全新安装