不同场景下的jmockit使用(转摘自http://www.taobaotest.com/blogs/2292)

 1.       综述

Jmockit官网示例:http://jmockit.github.io/tutorial/AnExample.html

Jmockit是一个mock框架,针对jmockit的介绍请查看http://www.taobaotest.com/blogs/2277,以下内容针对具体的使用场景进行介绍。

2.       普通方法的mock

  

         测试代码

 

         初始化代码

 

说明

     初始化代码中

  1. @Mocked  表示要mock一个SellerOrderOpenUtil类或LogicUtil类
  2. methods = { "getEtcOrderOpenMap"}表示这个类里面的这个方法使用mock,其他方法不mock
  3. inverse = false  表示反转,如果为true,则SellerOrderOpenUtil类中除了methods里面的方法不mock,其他方法都mock

 

测试代码中

  1. new Expectations() 表示一个期望块
  2. logicUtil.getSellerBySellerId(anyLong);要mock的方法
  3. result = new EticketSeller();  表示mock方法返回的值
  4. times = 1; 表示该方法被调用几次

 

3.  调用protected方法

new Expectations(suitProcessor) {

{

this.invoke(suitProcessor, "suitETicket", 0L);

result = baseResult; // 也可以是returns(false);

 times = 1;

    }

};

 

其中suitProcessor为被测类

@Mocked(methods = { "suitETicket" })SuitSuccessProcessor suitProcessor = new SuitSuccessProcessor();

 

说明:

  1. 因为被测方法中调用了本类中的其他方法,需要mock其他方法
  2. 因为是protected的,所以需要通过反射的方式

 

4.  静态变量赋值

new Expectations(notifyUtil) {

    {

       this.setField(notifyUtil, "sendService", sendService);

       sendService.sendETicket(123);

       result = sendResult; 

         times = 1;

       }

};

sendService定义如下:

   private static ISendService sendService;

 

   @Mocked(methods = {"sendETicket"}, inverse = false) ISendService sendService;

   @Mocked(methods = {"updateValidityVertical"}, inverse = false) NotifyUtil notifyUtil;

 

 sendService是私有静态变量,需要通过setField的方式赋值

 

5.  被测方法中使用调用同一个方法两次

如果被测方法调用了同一个方法两次,如果两次直接没有需要mock的其他方法,则可以直接把times写为2,但是如果之间有需要mock的其他方法,则需要两次都进行mock

 

 

   测试代码

 

 

 

6.  使用jmockit需要注意的事项

  1. 引入jmockit包是jmockit的包的顺序要在junit之前
  2. Mock一个对象,其实mock了整个类,该类的任何一个实例都被mock了
  3. 用@mocked注解,这个类的父类及祖先类都被mock了
  4. 一个期望块中可以mock多个不同类的方法,但是这些不同类的方法如果在同一个被测代码中,则mock顺序需要和源码中的顺序一致
  5. Mock方法中的参数要和该代码实际执行时的参数一致
  6. Mock方法中传递的参数必须和源码中传递的参数一致,也就是如果源码中传递了确定的一个值比如1,则在mock代码中也需要传递1,而不能是其他int类型,当然了,可以直接使用anyInt来代替,其他类似,对于object类型,可以使用any,强制转换为需要的类型。

转载于:https://www.cnblogs.com/francis-alice/articles/3936496.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值