为什么EclEmma没有使用@RunWith(PowerMockRunner.class)进行测试的覆盖代码

Lot*_*ava 11 java testing junit mockito powermock

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

我正在使用JUnit 4.8.1和Mockito.

会是什么呢?

Sim*_*nni 0

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

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

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

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

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

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