当前位置: 首页 > 知识库问答 >
问题:

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

葛智敏
2023-03-14

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

经过进一步调查,我发现“JaCoCo不能很好地处理动态修改/创建的类(这就是powermock的工作方式)。这是一个已知的限制,我们目前对此无能为力”。

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

共有3个答案

瞿宏儒
2023-03-14

对我有用的是删除它

@RunWith(PowerMockRunner.class)

还有把这个加到班里

@Rule
public PowerMockRule rule = new PowerMockRule();

还需要将Powermocki的依赖项添加到Junit4规则。

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

这个官方页面将有助于更多地理解它。PowerMock

甄文彬
2023-03-14

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

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

<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

在这里,您可以看到sonar考虑了静态方法和被PowerMock模仿的< code>new语句:

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

看看这个测试

尉迟鸿熙
2023-03-14

简单的回答:不,没有。

长回答-归结为这些选项:

  • 请查看PowerMock团队的这个Wiki页面,也许“离线检测”适合您
  • 希望相应的bug在某个时候得到修复(我不会就此屏息)
  • 通过重构和改进生产代码,摆脱对PowerMock(ito)的依赖
  • [我想我很早以前就评估过各种覆盖工具;有一种商业工具声称甚至可以与PowerMock一起使用。但我不记得任何细节。所以我基本上是说:另一种专有覆盖工具与PowerMok一起使用的可能性很小]
 类似资料:
  • 我正在尝试对<code>java进行单元测试。lang类。 背景:到目前为止有效的方法 这不是真正的标准,但是将 } 中 (在 Ubuntu 上)中提供的源代码和 rt.jar 中提供的类复制到 中非常简单,然后 JaCoCo maven 插件可以看到它们并为某些类生成合适的输出。 例如,我得到了一些关于来源的报道。 但是我无法覆盖< code>java.lang中的类。调用< code>Byte

  • 我有这样一个简单的课程: 我想为它写一个测试,下面是一个框架: ErrorLogger类中的logger是由StaticLoggerBinder提供的,所以我的问题是-如何让它工作,以便那些检查“1*logger.error(u作为字符串)”可以工作?在ErrorLogger类中,我找不到一种恰当的方式来嘲笑那个记录器。我曾考虑过反射,并以某种方式访问它,此外,mockito注入也有一个想法(但如

  • 是否有人能够从Maven Build获得JaCoCo中JMockit和Powermock单元测试的复盖范围? 我有一个Powermock单元测试的现有测试集,我希望逐步将其迁移到JMockit。但是我需要能够在一个报告中看到所有单元测试的测试覆盖范围,最好是在Sonar中。 通过将JaCoCo置于“脱机”模式,我确实使JMockit和Powermock测试与Surefire/JaCoCo一起运行(

  • 目前正在搜索教程、解释和示例。我试过不同的例子,遇到了不同的错误。我当前的错误是: |错误编译错误编译[单元]测试:启动失败: 在我的测试报告中。它输出: 单元测试结果-摘要未执行测试。 我的“用户pec.groovy”代码是这样的: 有人能帮忙吗。我是圣杯新手。谢谢 除上述问题外,当我在课堂上省略了如下所示的禁忌: 我发现了这个错误: |运行1单元测试...1 of 1|失败:初始化错误(org

  • 我正在尝试集成Jacoco,以便使用Maven获得Cucumber测试的代码覆盖率。以下是我的项目结构: > -src主java页面 -src主java助手 -src-测试-java-资源-功能 -src测试java步骤 以下是我的POM中的Jacoco配置。xml 我能够生成代码覆盖率报告。但是,在报告中,它涵盖了-src主包中的所有类。根据不同的google搜索和SO帖子,我试图修改POM以排

  • 问题内容: 我有几个DAO对象,这些对象用于从数据库中检索信息,我 确实 想为它们编写一些自动化测试,但是我很难弄清楚该怎么做。 我正在使用Spring 来运行实际查询(通过准备好的语句)并将结果映射到模型对象(通过类)。 如果要编写单元测试,则不确定如何/应该模拟对象。例如,由于只有读操作,因此我将使用实际的数据库连接,而不模拟jdbcTemplate,但我不确定那是正确的。 这是批处理中最简单