Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么EclEmma没有';t使用@RunWith(PowerMockRunner.class)测试覆盖率代码_Java_Testing_Junit_Mockito_Powermock - Fatal编程技术网

Java 为什么EclEmma没有';t使用@RunWith(PowerMockRunner.class)测试覆盖率代码

Java 为什么EclEmma没有';t使用@RunWith(PowerMockRunner.class)测试覆盖率代码,java,testing,junit,mockito,powermock,Java,Testing,Junit,Mockito,Powermock,我在Eclipse中使用EclEmma来帮助我知道我的项目中哪里缺少代码测试,但是使用@RunWith(PowerMockRunner.class)的所有测试都不会被调用,因此也不会被测试 我将JUnit4.8.1与Mockito一起使用 可能是什么?AFAIK eclEmma以及许多其他覆盖系统修改.class文件以添加覆盖说明。这些工具中的大多数是在“编译时”,而不是在运行时完成的 相反,PowerMock以及AspectJ LTW和许多其他系统在“运行时”操作相同的字节码: PowerMo

我在Eclipse中使用EclEmma来帮助我知道我的项目中哪里缺少代码测试,但是使用
@RunWith(PowerMockRunner.class)
的所有测试都不会被调用,因此也不会被测试

我将JUnit4.8.1与Mockito一起使用


可能是什么?

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

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

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

我对eclEmma(各种版本)和Cobertura以及AspectJ LTW都有类似的问题,因为当运行时对.class文件进行修改时,它会以某种方式破坏以前由coverage工具所做的修改

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


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

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


然而,似乎提供了正确的覆盖范围。唯一的问题是,它似乎不再被维护,您无法在Eclipse Juno中删除突出显示。

在这里,您可以找到有效的示例,可以帮助您解决此问题


使用
mvn clean package
查看jacoco报告

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

static {
PowerMockAgent.initializeIfNeeded();
}

@Rule
public PowerMockRule rule = new PowerMockRule();
编译类并运行测试类。代码覆盖率在课堂上运行良好。此更改仅用于在EclipseIDE中运行eclEmma插件,没有任何问题


在编写测试用例之后,我们将代码恢复到正常状态。将@RunWith(PowerMockRunner.class)替换为@RunWith(JUnit4.class),并在上面的静态代码和powermockrule行中进行了注释。

您能否提供更多详细信息,如Mockito、PowerMock和EclEmma的版本?嘿,我使用的是EclEmma的2.1.0版,在该版本中是一个bug,在EclEmma 1.5.x中,它显示了良好的测试覆盖率。OK,从2.x版开始,EclEmma似乎不再使用Emma了。他们正在使用自己的覆盖工具,称为JaCoCo。由于我不知道您正在使用的PowerMock版本,您应该尝试PowerMock 1.4.11,其中包括一些与JaCoCo相关的修复程序:您好,我正在使用PowerMock 1.4.9,我将对照eclEmma 2.1.0检查1.4.11,希望可以。让我不断更新,如果可以,我将添加一个正确的答案。