jmockit对静态函数和参数调用接口实现打桩2

单元测试中的打桩对象,主要有两种:
1、对象参数:在外部构造,作为参数传入调用的方法;
2、静态方法:在功能方法内部调用;
由于我们系统中有很多静态方法,所以前面选型的mock工具:jmock/easymock/gmock/mockito 就直接被淘汰,它们不支持这种能力
现在支持这种能力的mock工具只有JMockit,
但是,经过昨天和今天的测试,发现它使用起来还是比较复杂的,而且,它不能和groovy很好的兼容 !

下面是成功实现:就是结合使用JMockit和groovy两种能力,只使用JMockit的静态方法替换能力,剩下的全部使用groovy自身的map和expando能力
下面的例子是测试 ScheduleTargetImpl.deleteTarget方法的测试代码,两种能力都用到了
实现实例
public class ScheduleTargetImplTest {
@Test
public void testDeleteTarget() {
// 对TExpandedNElement 打桩
def element = [getProductid:{"pid"}, getProductTarget:{"pTarget"}] as TExpandedNElement
// 对TTarget 打桩
def Target = [getTargetID:{"vid"}] as TTarget
// 替换ContextUtils.getRequestMap 静态方法
Mockit.redefineMethods(ContextUtils, TargetMock)
// 替换AbstractTargetFactory.getInstance() 静态方法,并对返回对象的deleteTarget方法 打桩
Mockit.redefineMethods(AbstractTargetFactory, TargetMock1)

ScheduleTargetImpl impl = new ScheduleTargetImpl();
assertTrue impl.deleteTarget("token", element, Target);
}
}
class TargetMock {
public static Map getRequestMap() {
new HashMap()
}
}
class TargetMock1{
public static AbstractTargetFactory getInstance() {
[deleteTarget:{}] as AbstractTargetFactory
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值