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
class MyStringUtil {
public static String uppercase(String s) {
return s.toUpperCase();
}
}
@RunWith(PowerMockRunner.class) // 1
@PrepareForTest({ MyStringUtil.class }) // 2
public class HelloTest {
@Before
public void before() {
PowerMockito.mockStatic(MyStringUtil.class); // 3
}
@Test
public void test() throws IOException {
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方法,返回预期值。
-- heipark