【问题标题】:Code coverage with Powermock and gradlePowermock 和 gradle 的代码覆盖率
【发布时间】:2017-07-14 11:01:11
【问题描述】:

我在测试中使用了 powermock。作为 powermock 工具,我没有得到 jacoco 的适当覆盖。

  1. 我可以看到,当我在 IDE 中运行测试时,Android Studio 中的 IntelliJ IDEA 覆盖运行程序为我提供了适当的覆盖。 IDEA 代码覆盖率如何工作?
  2. 我已阅读,离线 jacoco 仪器可用于获取覆盖范围。如何在gradle中做到这一点?有任何 gradle 插件吗?

【问题讨论】:

    标签: android-studio intellij-idea code-coverage powermock jacoco


    【解决方案1】:

    PowerMock documentation 中提到了“Jacoco 离线”;并且有一个 maven example:

    的链接

    最坏的情况是,您必须研究该解决方案的工作原理,然后将其适应 Gradle。

    【讨论】:

    • 我们放弃了 powermock ,并重构了我们的代码,jacoco 和 gradle 是一团糟!
    【解决方案2】:

    我无法在 gradle 方面为您提供帮助,但我已经设法使用 powermock-module-javaagent 使用 Jacoco 和 maven 生成 PowerMock 覆盖范围。也许你可以把这个 pom 翻译成 gradle 文件。

    只需确保将 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

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

    如果您想模拟 newstatements,请确保使用 PowerMockRule 而不是 PowerMockRunner

    看看this test

    【讨论】:

      猜你喜欢
      • 2018-02-08
      • 1970-01-01
      • 2021-07-21
      • 2019-03-29
      • 1970-01-01
      • 2018-01-11
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多