1. 加入依赖包(maven)
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-api-mockito</artifactId>
- <version>1.4.10</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.powermock</groupId>
- <artifactId>powermock-module-junit4</artifactId>
- <version>1.4.10</version>
- <scope>test</scope>
- </dependency>
2. example
- classMyStringUtil{
- publicstaticStringuppercase(Strings){
- returns.toUpperCase();
- }
- }
- @RunWith(PowerMockRunner.class)//1
- @PrepareForTest({MyStringUtil.class})//2
- publicclassHelloTest{
- @Before
- publicvoidbefore(){
- PowerMockito.mockStatic(MyStringUtil.class);//3
- }
- @Test
- publicvoidtest()throwsIOException{
- PowerMockito.when(MyStringUtil.uppercase("abc")).thenReturn("ABC");//4
- assertEquals("ABC",MyStringUtil.uppercase("abc"));//5
- }
- }
① 标注使用PowerRunner运行test(powermock会修改字节码)
② 设置mock类(支持多个类,逗号分隔),这个可以设置到class上,也可以设置到method上。这里面包含两种类型:
- 被mock的类(如上例MyStringUtil.class,如果mock类为系统类,如System.class,则不需要这里设置就可以使用)
- context类,如果是在XxxServer里面希望mock MyStringUtil类,则要设置 XxxServer.class
③ 告诉powermock需要mock哪个类。(感觉这里配置和②有点重合)
④ 打桩,设置mock对象返回预期值。(测试mock方法还未执行)
⑤ 执行mock方法,返回预期值。