Mock系统类
注意:尽管此处显示的所有示例都是使用EasyMock API扩展制作的,但相同的技术也适用于Mocktio API扩展。
总览
- 在类上使用
@RunWith(PowerMockRunner.class)
注解。 - 在类上使用
@PrepareForTest({ClassThatCallsTheSystemClass.class})
注解。 - 使用
mockStatic(SystemClass.class)
去Mock系统类,然后设置正常的期望值。 - 仅EasyMock可用: 使用
PowerMock.replayAll()
切换到replay模式。 - 仅EasyMock可用: 使用
PowerMock.verifyAll()
切换到verify模式。
示例
PowerMock 1.2.5及更高版本支持Mock Java系统类(例如位于java.lang和java.net等中的类)中的方法。此方法无需修改JVM或IDE设置即可!模拟这些类的方式与平常有些不同。通常,您将准备包含要模拟的静态方法的类(我们称其为X),但是因为PowerMock无法准备要测试的系统类,所以必须采用另一种方法。因此,不用准备X,而是准备调用X中静态方法的类!让我们看一个简单的例子:
public class SystemClassUser {
public String performEncode() throws UnsupportedEncodingException {
return URLEncoder.encode("string", "enc");
}
}