1. mock私有方法
待测试类
public class Demo {public void publicMethod() {System.out.println("public method invoke");protectedMethod("str");privateMethodA();privateMethodB();System.out.println("public method end");}protected void protectedMethod(String str) {System.out.println("protected method invoke");System.out.println("protected method end");}private void privateMethodA() {System.out.println("private methodA invoke");System.out.println("private methodA end");}private String privateMethodB() {System.out.println("private methodB invoke");System.out.println("private methodB end");return "privateMethodB";}
}
测试类
import com.lianlian.cbfin.credit.mng.controller.Demo;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;import static org.mockito.Matchers.any;@RunWith(PowerMockRunner.class)
@PrepareForTest({Demo.class})
public class DemoTest {private Demo demo;@Beforepublic void init() throws Exception {demo = PowerMockito.spy(new Demo());
PowerMockito.doNothing().when(demo, "protectedMethod", any());PowerMockito.doNothing().when(demo, "privateMethodA");PowerMockito.doReturn("123").when(demo, "privateMethodB");}@Testpublic void publicMethod(){demo.publicMethod();}
}
运行结果
public method invoke
public method end
2. mock静态方法
待测试类
public class Demo {public void demoMethod() {System.out.println("demo method invoke");privateStaticMethod();StaticClass.publicStatic();System.out.println("demo method end");}private static String privateStaticMethod(){System.err.println("privateStatic method invoke");return null;}
}
静态方法提供类
public class StaticClass {public static void publicStatic(){System.out.println("publicStatic method invoke");}
}
测试类-未正确mock
import com.lianlian.cbfin.credit.mng.controller.Demo;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.modules.junit4.PowerMockRunner;@RunWith(PowerMockRunner.class)
public class DemoTest {private Demo demo;@Beforepublic void init() throws Exception {demo = PowerMockito.spy(new Demo());}@Testpublic void demoMethod(){demo.demoMethod();}
}
mock前运行结果
demo method invoke
privateStatic method invoke
publicStatic method invoke
demo method end
测试类-正确mock
import com.lianlian.cbfin.credit.mng.controller.Demo;
import com.lianlian.cbfin.credit.mng.controller.StaticClass;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;@RunWith(PowerMockRunner.class)
@PrepareForTest({Demo.class, StaticClass.class})
public class DemoTest {private Demo demo;@Beforepublic void init() throws Exception {demo = PowerMockito.spy(new Demo());}@Testpublic void demoMethod() throws Exception {PowerMockito.mockStatic(StaticClass.class);PowerMockito.mockStatic(Demo.class);PowerMockito.when(Demo.class, "privateStaticMethod").thenReturn("mock privateStaticMethod");
demo.demoMethod();}
}
正确mock后运行结果
demo method invoke
demo method end