Mockito
// 私有变量赋值
FieldSetter.setField(Object target, Field field, Object value);
PowerMockito
PowerMockito需要指定PowerMockRunner 使用PrepareForTest添加需要准备的类
@RunWith(PowerMockRunner.class)
@PrepareForTest({xxxx.class, xxxx.class,.....})
public class ClassA {
}
模拟测试方法内的静态方法调用
//模拟静态类 需要添加 PrepareForTest(StaticClass.class)
//把要模拟的类添加到注解中
PowerMockito.mockStatic(StaticClass.class);
//模拟带返回值静态方法 (先模拟静态类)参数可以用Mockit的any来代替 也可以传入具体的对象 *Note 不能混用
PowerMockito.when(StaticClass.StaticMethod((Mockito.any(),Mockito.anyBoolean())).thenReturn(ReturnObject);
////模拟无返回值静态方法 (先模拟静态类)参数可以用Mockit的any来代替 也可以传入具体的对象 *Note 不能混用
PowerMockito.doNothing().when(StaticClass.class, "StaticMethod" , Mockito.any(),Mockito.any(),..... );
////模拟无返回值静态方法 发生异常(先模拟静态类)参数可以用Mockit的any来代替 也可以传入具体的对象 *Note 不能混用 原则上被调用方法没有抛出异常是不允许模拟异常的 但是可以用运行时异常强行抛出
PowerMockito.doThrow().when(StaticClass.class, "StaticMethod" , Mockito.any(),Mockito.any(),..... );
//doNothing doThrow doReturn 可以链式调用 表示方法按次序调用每次发生的事件
//具有返回值的不允许使用 doNothing
//eg: 表示方法被第一次调用返回1 第二次返回空 第三次 发生异常
PowerMockito.doReturn(1).doReturn(null).doThrow(new Exception()).when(StaticClass.class, "StaticMethod" , Mockito.any(),Mockito.any(),..... );
模拟测试方法内的对象实例化
//eg: 需要模拟A类的实例化 以及xxMethod的调用
public class TestClass {
public String TestMethod(){
A a= new A();
String str =a.xxMethod(xxx,xxx);
}
}
//模拟A 实例化 首先需要模拟A的实例
A a = PowerMockito.mock(A.class);
// 当A实例化时候返回这个模拟的a
PowerMockito.whenNew(A.class).withNoArguments().thenReturn(a);
//调用xxMethod
PowerMockito.when(a.xxMethod(Mockito.any(),Mockito.any(),Mockito.any().... ) ).thenReturn(Object);//
////模拟无返回值方法 (先模拟静态类)参数可以用Mockit的any来代替 也可以传入具体的对象 *Note 不能混用
PowerMockito.doNothing().when(a).Method( Mockito.any(),Mockito.any(),.....);
////模拟无返回值方法 发生异常(先模拟静态类)参数可以用Mockit的any来代替 也可以传入具体的对象 *Note 不能混用
PowerMockito.doThrow().when(a).Method( Mockito.any(),Mockito.any(),.....);