在 maven 中使用 jacoco 代码覆盖的 Powermock

问题描述

已遵循 https://github.com/jfcorugedo/sonar-scanner/blob/master/pom.xml 中的说明,并使用了 Powermock 文档中提到的 jacoco 离线检测,但是当我使用以下配置时,代码覆盖率仅显示电源模拟代码覆盖率,不显示其他非 powermock (mockito 和 Junit)覆盖范围。

有没有一种方法可以同时实现 powermock、mockito 和 Junit 代码覆盖率

下面是我的 pom 文件,它不会显示 powermock 覆盖范围。

let () = dispatch (function
  | Before_rules -> 
    asm_rule ()
  | After_rules ->
    pdep ["link"] "linkdep" (String.split_on_char ',')
  | _ -> ())

下面是与 Powermock 一起工作但忽略所有其他测试用例的 POM 文件(Jacoco 离线检测)。 argline 命令适用于surefire 2.19.1,但似乎不适用于更高版本。

<properties>
       <powermock.version>2.0.9</powermock.version>
       <jacoco.version>0.8.5</jacoco.version>
    </properties>
  <dependencies>
    <dependencies>
            
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito2</artifactId>
            <version>2.0.4</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>2.0.4</version>
            <scope>test</scope>
        </dependency>
        <!-- Power Mock -->
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-javaagent</artifactId>
            <version>${powermock.version}</version>
        </dependency>

        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4-rule-agent</artifactId>
            <version>${powermock.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build> 
     <plugins>
        <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>jacoco-check</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <rule>
                                    <element>PACKAGE</element>
                                    <limits>
                                        <limit>
                                            <counter>LINE</counter>
                                            <value>COVEREdratIO</value>
                                            <minimum>0.0</minimum>
                                        </limit>
                                    </limits>
                                </rule>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    </plugins>
    </build>

被这个问题困扰了很长时间,我尝试在 mavensuefire 插件配置中添加 @{argline} 注释以及 javaagent 命令,但似乎也不起作用。我正在处理的代码需要 powermock,因为它们有多个异步调用,需要使用 withNew 进行模拟。使用 cobretura 也不是一种选择。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)