使用 JUnit @Parameterized 的三叶草仪器测试因 NoClassDefFound 而失败:junit/runner/TestRunListener

Clover instrumented tests with JUnit @Parameterized are failing with NoClassDefFound: junit/runner/TestRunListener

我在本教程的帮助下成功构建了我们的测试https://confluence.atlassian.com/display/CLOVER/Using+Clover+with+Maven+Tycho+Plugin,生成了覆盖率数据,但有一个小问题:

所有使用@Parameterized 注释 运行 的测试都失败了

java.lang.NoClassDefFound: junit/runner/TestRunListener

根据我目前的发现,异常来自 clover 注入的 JUnitParameterizedTestSniffer。

你知道如何解决这个问题吗?

我们正在使用 maven3、tycho 0.22、java7、junit 4.11。

这听起来包 junit/runner 在测试的 class 加载器中不可见。如果您只从 JUnit 包中导入选定的包,就会发生这种情况。

如果您改为使用 JUnit 包的 Require-Bundle,应该不会再出现 class 加载问题。

最后我在检测后使用这段代码解决了这个问题:

<replace dir="${project.instrumented.dir}" token="new com_atlassian_clover.JUnitParameterizedTestSniffer()" value="com_atlassian_clover.TestNameSniffer.NULL_INSTANCE">
    <include name="**/*.java"/>
</replace>

也许这不是最好的解决方案 - 但它工作得很好。 这个问题也在 Atlassian Answears (https://answers.atlassian.com/questions/32508110/answers/32530869)

上被问到