Java测试框架系列:PowerMock使用系列-5:Mock策略

Mock策略

总览

  1. 在类上使用 @RunWith(PowerMockRunner.class) 注解。
  2. 在类上使用 @MockPolicy(MyMockPolicy.class) 注解。

示例

可以使用Mock策略使得与PowerMock隔离的某些框架的代码的单元测试变得更容易。Mock策略的实现可以是如抑制某些方法,抑制静态初始化程序或拦截方法调用,并更改某些框架或一组类或接口的返回值(例如,返回模拟对象)。例如,可以实施Mock策略来避免为测试编写重复的设置代码。假设您使用的是框架X,并且要对其进行测试,则要求某些方法应始终返回模拟实现。或许也必须抑制某些静态初始化程序。与其在测试之间复制该代码,不如编写一个可重用的Mock策略。

PowerMock 1.1提供了三种开箱即用的模拟策略,用于模拟slf4j,java common-logging和log4j。让我们以slf4j为例,假设您有一个看起来像这样的类:

public class Slf4jUser {
	private static final Logger log = LoggerFactory.getLogger(Slf4jUser.class);

	public final String getMessage() {
		log.debug("getMessage!");
		return "log4j user";
	}
}

这里有一个问题,因为logger在Slf4jUser类的静态初始化器中实例化。有时,这会导致问题,具体取决于日志配置,因此在单元测试中要做的是‘存根’(或者说是‘打桩’)日志实例。这是完全可行的,无需使用Mock策略。一种方法是从测试中禁止Slf4jUser类的静态初始化程序开始。然后,我们可以创建Logger类的存根或漂亮的模拟并将其注入Slf4jUser实例。但这还不够,假设我们已经配置了slf4j以使用log4j作为后端日志,那么在运行测试时,控制台中将显示以下错误:

log4j:ERROR A "org.apache.log4j.RollingFileAppender" object is not assignable to a org.apache.log4j.Appender" variable.
log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
log4j:ERROR [org.powermock.core.classloader.MockClassLoader@aa9835] whereas object of  type
log4j:ERROR "org.apache.log4j.RollingFileAppender" was loaded by [sun.misc.Launcher$AppCl
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值