1.pom文件加入依赖
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>2.0.0</version>
<scope>test</scope>
</dependency>
注意:powermockito2.*版本对应mockito2.*之后的(依赖注意powermock-api-mockito2)
@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticUtil.class)
public class JacocoServiceTest {
@InjectMocks
JacocoService service;
@Before
public void setUp(){
PowerMockito.mockStatic(StaticUtil.class);
MockitoAnnotations.initMocks(this);
//解决无法获取实体类表名问题
Config config = new Config();
EntityHelper.initEntityNameMap(Entity.class,config);
}
@Test
public void selectDte() {
PowerMockito.when(StaticUtil.staticMethod("调用静态方法")).thenReturn("期望值");
//调用被测试方法,当被测试方法调用StaticUtil的静态方法staticMethod时,静态方法staticMethod返回值为 “期望值”
String s = service.selectDte();
Assert.assertEquals("被测试方法期望值",s);
}
}
注意:
PowerMockito.mockStatic(StaticUtil.class); MockitoAnnotations.initMocks(this);
前后顺序不可颠倒(参考的其他大佬意见,未实测)
当被测试类需要使用多个类的静态方法时,
@PrepareForTest({StaticUtil.class,StaticUtil2.class})
当被测试类包含私有静态方法时,上面方式不可用,需要更换when()方法中的参数
@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticUtil.class)
public class JacocoServiceTest {
@InjectMocks
JacocoService service;
@Before
public void setUp(){
PowerMockito.mockStatic(StaticUtil.class);
MockitoAnnotations.initMocks(this);
//解决无法获取实体类表名问题
Config config = new Config();
EntityHelper.initEntityNameMap(Entity.class,config);
}
@Test
public void selectDte() {
//私有静态方法staticPrivateMethod(String str),有参数时mock方式,when(包含私有静态方法的类对象,方法名,方法参数),
//方法参数可以不用Mockito.anyString(),自己写一个字符串;多个参数时不可以同时有mock的参数和自己写的参数,全部mock参数或全部自己写
PowerMockito.when(StaticUtil.class,"staticPrivateMethod",Mockito.anyString()).thenReturn("期望值");
//doReturn.when 和 when.thenReturn 结果相同,详细区别可自行查阅资料
//PowerMockito.doReturn("期望值").when(StaticUtil.class,"staticPrivateMethod",Mockito.anyString());
//调用被测试方法,当被测试方法调用StaticUtil的私有静态方法staticPrivateMethod时,静态方法staticPrivateMethod返回值为 “期望值”
String s = service.selectDte();
Assert.assertEquals("被测试方法期望值",s);
}
}