1 PowerMock静态方法
写单元测试时,经常会遇到测试方法体内调用了某些工具类的静态方法的情况,而这些静态方法一般是读取配置中心里的文件数据,或者是一些其他涉及到需要启动项目的操作(往往这些操作会造成Mock单元测试的不彻底,有些流水线扫描工具可能会认定单元测试没有覆盖的情况)。因此,需要将一些静态方法mock掉,只要调用了该静态方法,就返回我们预设好的一些值。
2 PowerMock使用的前提条件
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
</dependency>
3 创建单元测试类
几点注意:
1 @PrepareForTest注解和@RunWith注解是结合使用的,
2 不要单独使用它们中的任何一个,否则不起作用。
3 将需要mock的静态方法类名写在这里,如有多个,以逗号分割
mock后,调用该静态方法,传入任何String类型,都会返回 “成功”
假设有一个类ATest的getObect()方法中调用StaticFunctionTest1中的静态方法getValue(String para),那么现在mock后,就会返回固定值 “成功”
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"javax.script.*", "javax.management.*", "org.w3c.dom.*", "org.apache.log4j.*", "org.xml.sax.*", "javax.xml.*"})
@PrepareForTest({StaticFunctionTest1.class,StaticFunctionTest2.class}) //
public class UnitTest {
@Test
public void Test1(){
PowerMockito.mockStatic(StaticFunctionTest1.class);
PowerMockito.when(StaticFunctionTest1.getValue(Mockito.anyString())).thenReturn("成功");
ATest test = new ATest();
test.getObect();
}