12

我正在使用 EclEmma 和 Eclipse 来帮助我了解我的项目中缺少代码测试的地方,但是所有测试@RunWith(PowerMockRunner.class)都没有被调用,因此没有被测试。

我正在使用带有 Mockito 的 JUnit 4.8.1。

会是什么呢?

4

4 回答 4

3

它是为双方报告的一个已知错误:

http://code.google.com/p/powermock/issues/detail?id=402 https://github.com/jacoco/eclemma/issues/15#issuecomment-9565210

然而, eCoberture似乎提供了正确的覆盖范围。唯一的问题是,它似乎不再被维护,并且您无法删除 Eclipse Juno 中的亮点。

于 2012-10-23T17:36:20.440 回答
1

在这里您可以找到有效的示例,并可以帮助您解决此问题 https://github.com/Godin/jacoco-experiments

用于mvn clean package查看 jacoco 报告

于 2015-11-01T10:53:45.167 回答
1

我们有一个要模拟的静态类。使用模拟静态类,eclEmma 代码覆盖率插件在 Eclipse 中不起作用。所以我们所做的是,所以将 @RunWith(JUnit4.class) (而不是 @RunWith(PowerMockRunner.class) )放在类之前并在类中放置以下行

static {
PowerMockAgent.initializeIfNeeded();
}

@Rule
public PowerMockRule rule = new PowerMockRule();

编译类并运行测试类。代码覆盖率在课堂上运行良好。此更改只是为了在 Eclipse IDE 中运行 eclEmma 插件而没有问题。

编写测试用例后,我们将代码恢复正常。放置 @RunWith(PowerMockRunner.class) 而不是 @RunWith(JUnit4.class) 并在静态代码和 powermockrule 行上方进行注释。

于 2017-01-31T11:45:25.377 回答
0

AFAIK eclEmma 以及许多其他覆盖系统会修改您的 .class 文件以添加覆盖说明。大多数这些工具在“编译时”而不是在运行时执行此操作。

相反,PowerMock 以及 AspectJ LTW 和许多其他系统在“运行时”操作相同的字节码:

PowerMock 是一个框架,它扩展了其他模拟库,例如具有更强大功能的 EasyMock。PowerMock 使用自定义类加载器和字节码操作来模拟静态方法、构造函数、最终类和方法、私有方法、删除静态初始化程序等。

我在 eclEmma(各种版本)和 Cobertura 与 AspectJ LTW 结合时遇到了类似的问题,因为当 .class 文件的运行时修改发生时,它会以某种方式破坏覆盖工具之前所做的修改。

我还没有找到解决方案,但至少找到了症状。

正确的解决方案是调试 PowerMock 工具并找出它在哪里以及如何破坏覆盖工具。对于测试工具来说,破坏覆盖率工具是一个相当大的问题,因为这两者经常一起使用:)

于 2012-07-24T03:29:11.100 回答