Mockito单元测试-answer

Answer接口说明

对mock对象的方法进行调用预期的设定,可以通过thenReturn()来指定返回值,thenThrow()指定返回时所抛异常,通常来说这两个方法足以应对一般的需求。但有时我们需要自定义方法执行的返回结果,Answer接口就是满足这样的需求而存在的。另外,创建mock对象的时候所调用的方法也可以传入Answer的实例mock(java.lang.Class<T> classToMock, Answer defaultAnswer),它可以用来处理那些mock对象没有stubbing的方法的返回值。

使用方法


   
   
  1.    @Test(expected = BatchExecutException.class)
  2.    public void testCheckExcepHaltForSendGooods01() {
  3.        SendGoodsParams params = new SendGoodsParams();
  4.        params.createParams(20, user.getTaobaoId());
  5.        Long[] taobaoIdsArray = params.taobaoIds.toArray(new Long[20]);
  6.        Long[] tidsArray = params.tids.toArray(new Long[20]);
  7.        Long[] sysTidArray = params.sysTids.toArray(new Long[20]);
  8.        Mockito.when(tradeQueryServiceNoSolr.queryByPrimaryKeysBase(Mockito.any(User.class),
  9.                Mockito.anyList(), Mockito.anyBoolean())).then(new Answer<Object>() {
  10.            @Override
  11.            public Object answer(InvocationOnMock invocation) throws Throwable {
  12.                Object[] args = invocation.getArguments();
  13.                List<TradePrimaryKey> tradePrimaryKeys = (List<TradePrimaryKey>) args[1];
  14.                List<TbTrade> trades = new ArrayList<TbTrade>();
  15.                for (TradePrimaryKey tpk : tradePrimaryKeys) {
  16.                    TbTrade temp = new TbTrade();
  17.                    temp.setId(1L);
  18.                    temp.setTaobaoId(tpk.getTaobaoId());
  19.                    temp.setTid(tpk.getTid());
  20.                    temp.setSysTid(tpk.getSysTid());
  21.                    temp.setMergeSplitType(0);
  22.                    TbOrder tbOrder = new TbOrder();
  23.                    tbOrder.setTid(tpk.getTid());
  24.                    tbOrder.setOid(tpk.getTid());
  25.                    tbOrder.setRefundId("1111");
  26.                    tbOrder.setMergeSplitType(0);
  27.                    tbOrder.setRefundStatus(TbOrder.REFUND_WAIT_BUYER_RETURN_GOODS);
  28.                    temp.setOrders(Arrays.asList(new TbOrder[]{tbOrder}));
  29.                    trades.add(temp);
  30.                }
  31.                return trades;
  32.            }
  33.        });
  34.        tradeService.__checkExcepHaltForSendGooods(user, taobaoIdsArray, tidsArray,
  35.                sysTidArray, SendGoodTag.TYPE.OFFLINE);
  36.    }
使用Anser时,如果你测试时,可以从外部传入参数调用到这个方法,那么就不需要使用any。如果这个mock方法调用的参数,是内部创建出来的,那么只能使用any。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值