使用powermock 对private 和static 方法进行mock 测试,
public class LogUtil {
public static BaseAuditLog getLogBean(String operContent){
return null;
}
public static void saveLog(String context){
}
mock 使用:
@RunWith(PowerMockRunner.class) //1.
@PrepareForTest({LogUtil.class}) //2.
public class AddressBookServiceTest_mock {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test_staticMethod_PowerMock() {
//绕过静态类
PowerMockito.mockStatic(LogUtil.class);//3.绕过静态类
when(LogUtil.getLogBean(json)).thenReturn(new SensitiveInfoOperationLog());//4.预设静态类返回值
String response = addressBookServiceImpl.queryAddressBookFuzzy(json);
}
}
但是surefire具体执行,并且jacoco 收集覆盖率的时候:
surefire正常拉起执行,但是没有具体覆盖率信息,也就是jacoco 对static和private做字节码植入的时候有问题,jacoco有两种执行方式,jacoco 在线方式统计(字节码植入)有问题;修改离线方式,才能正常收集覆盖率.