最近在写单元测试,用到了PowerMock,测试覆盖率的时候碰到一个奇怪的问题,有几个类用idea的JaCoCo插件测试覆盖率为0,但用idea自己的插件测没问题,网上找了下,原来是JaCoCo和PowerMock冲突了,JaCoCo会忽略注解@PrepareForTest({})里面的类,解决办法是用JaCoCo的离线模式。
产生问题的代码如下
@RunWith(PowerMockRunner.class)
@PrepareForTest({UserService.class,UserUtil.class})
public class UserServiceTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void findall() {
//单元测试代码
}
}
注意看,测试的是UserService类,但是@PrepareForTest({UserService.class,UserUtil.class})里面又有UserService.class,那么JaCoCo就会忽略UserService,测出的这个类的覆盖率自然为0,用JaCoCo的On-the-fly模式 测试也会为0,解决办法是要用JaCoCo的离线模式(Offline Instrumentation)。
具体maven配置样例如下:官方
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.powermock</groupId>
<artifactId>powermock-examples</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>jacoco-offline</a
解决JaCoCo与PowerMock覆盖率冲突问题

在使用JaCoCo和PowerMock进行单元测试时遇到覆盖率显示为零的异常。问题源于JaCoCo忽略了@PrepareForTest注解中的类。解决方法是切换到JaCoCo的离线模式(Offline Instrumentation)。配置示例和详细冲突解释可在官方文档中找到,同时文章讨论了单元测试覆盖率标准,提出对于某些无实际意义的类是否应排除在外。
最低0.47元/天 解锁文章

1万+





