我正在使用Cobertura maven插件[版本2.7]来理解我的测试的代码覆盖率。我正在使用PowerMock [版本1.6.6]来模拟依赖对象。但当我运行 mvn cobertura:cobertura 并检查报告时,覆盖范围保持不变。当我不使用模拟时,它工作正常。这是兼容性问题吗? 为了确保报告是新生成的,我多次尝试 mvn clean 。
这是我的pom.xml
<properties>
<powermock.version>1.6.6</powermock.version>
</properties>
<build>
<plugins>
<!-- Cobertura plugin for code coverage -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.7</version>
<configuration>
<formats>
<format>html</format>
<format>xml</format>
</formats>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
对此有任何帮助表示赞赏。
答案 0 :(得分:0)
不幸的是,这是不可能的。我不知道Cobertura究竟是如何工作的,但我怀疑它使用与JaCoCo相同的方法并使用Java Agent修改字节代码。 但PowerMock在加载类时从磁盘读取类,因此所有更改都将丢失。 Cobertura可以在编译期间修改类的一个小变化。如果是,那么你可以尝试一下。
Cobertura项目看起来已经放弃了,所以我认为没有理由花时间与不支持的项目进行整合。我想专注于与JaCoCo的整合,并提供支持的动态仪表。