最近一直有使用PowerMock进行测试。很方便,但是当待测试方法的调用情况比较复杂的时候,往往不知道怎么处理。在这里把自己的解决方法整理一下做个备份。
直接以问题-解决方法的方式。
1.PowerMock mock 静态方法
mock静态方法,需要提前打上** @RunWith 和@PrepareForTest注解,@PrepareForTest**这个注解可用于类和方法。
关于** @RunWith 和@PrepareForTest**的使用场景,个人理解就是比较复杂的情形,比如mock私有方法,静态方法,mock在方法内部new的对象,final方法。
有了这两个注解,在mock静态方法之前,还需要使用** PowerMockito.mockStatic(YourStaticClass.class);**,之后就可以对该类的静态方法进行mock或者别的操作了。代码如下:
@RunWith(PowerMockRunner.class)
@PrepareForTest(YourStaticClass.class)
public class XXXTest {
@Test
public void test() {
PowerMockito.mockStatic(YourStaticClass.class);
when(YourStaticClass.staticMethod(something)).thenReturn(something);
// 待测试逻辑
}
}