Java测试框架系列:PowerMock使用系列-6:Mock系统类

本文介绍如何使用PowerMock框架模拟Java中的系统类,如java.lang和java.net中的类。通过注解和特定API,可以在不修改JVM或IDE设置的情况下模拟静态方法。文中提供了一个示例,演示如何模拟URLEncoder.encode方法。

Mock系统类

注意:尽管此处显示的所有示例都是使用EasyMock API扩展制作的,但相同的技术也适用于Mocktio API扩展。

总览

  1. 在类上使用 @RunWith(PowerMockRunner.class) 注解。
  2. 在类上使用 @PrepareForTest({ClassThatCallsTheSystemClass.class}) 注解。
  3. 使用 mockStatic(SystemClass.class) 去Mock系统类,然后设置正常的期望值。
  4. 仅EasyMock可用: 使用 PowerMock.replayAll() 切换到replay模式。
  5. 仅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");
	}
}

在这里,我们要模拟通常无法进行的静态方法调用的java.net.URLEncoder#encode(.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值