繁体   English   中英

使用 Jacoco 对使用 Powermock 编写的测试类进行单元测试

[英]Unit tests coverage using Jacoco for test classes written using Powermock

我正在尝试在 jenkins 的 sonarqube 仪表板上获取代码覆盖率报告。 代码覆盖率报告即将发布,但仅显示 4.6% 的覆盖率。 在调查时,我发现使用 PowerMocks 编写的测试类被跳过了。

在进一步调查中,我发现“JaCoCo 不能很好地与动态修改/创建的类一起使用(这就是 powermock 的工作方式)。这是我们目前无法做任何事情的已知限制”。

是否有任何解决方法,以便我也可以为使用 PowerMocks 编写的测试类获得适当的代码覆盖率。

简单的回答:不,没有。

长答案 - 归结为以下选项:

  • 已经查看了 PowerMock 团队的这个 Wiki 页面——也许“离线检测”可能适合你。
  • 希望相应的错误在某个时候得到修复(我不会屏住呼吸)
  • 摆脱对 PowerMock(ito) 的依赖——通过重构和改进你的生产代码
  • [我我很久以前就评估过各种覆盖工具; 并且有一个商业广告声称即使使用 PowerMock 也能正常工作。 但我不记得任何细节。 所以我基本上是说:有可能是一个微不足道的机会,另外,独有覆盖工具的工作原理与PowerMock]

我已经设法用 Jacoco 生成 PowerMock 覆盖率,使用powermock-module-javaagent

只要确保在 jacoco 代理之后放置 powermock 代理:

<artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <useSystemClassLoader>true</useSystemClassLoader>
                <argLine>${jacocoArgLine} -javaagent:${settings.localRepository}/org/powermock/powermock-module-javaagent/${powermock.version}/powermock-module-javaagent-${powermock.version}.jar -noverify</argLine>
...

如果你想看一个例子,看看这个项目: https : //github.com/jfcorugedo/sonar-scanner

在这里你可以看到声纳考虑了静态方法和 PowerMock 模拟的new语句:

在此处输入图片说明

如果要模拟new语句,请确保使用PowerMockRule而不是PowerMockRunner

看看这个测试

对我有用的是删除它

@RunWith(PowerMockRunner.class)

并将其添加到类中

@Rule
public PowerMockRule rule = new PowerMockRule();

还需要为 powermockito junit4 规则添加依赖项。

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-module-junit4-rule</artifactId>
  <version>2.0.2</version>
  <scope>test</scope>
</dependency>

这个官方页面将有助于更多地理解它。 电源模拟

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM