关于Mockito学习的一点自己的理解

1. 如果要使用@Mockito ,则要加入MockitoAnnotations.initMocks

MockitoAnnotations.initMocks 放在 junit 的 @Before 注解修饰的函数中更合适。

 

 

MockitoAnnotations.initMocks 的一个替代方案是使用 MockitoJUnitRunner 。

 

 

 2.一些注意点:

1.Dao层测试,直接用一些模拟数据,插入数据库,看看测试是否成功

2.Service主要来测试缓存的

3. web直接用Mock进行来测试

3. 使用方式:

方式一:

@Test
    public void queryx() {
        String pin = "testPin";
        String ip = "127.0.0.1";
        when(XXXJsf.getPreSwitch(any(XXXXReq.class))).thenAnswer(new Answer<Object>() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                GenericResult<XXXX> genericResult = new GenericResult<>();
                XXXX xjkCashierTradeRes = new xxx();
                //符合切量
                XXXXXRes.setxxxx(true);
                //成功
                genericResult.setSuccess(true);
                genericResult.setCode("0000");
                genericResult.setValue(XXXX);
                return genericResult;
            }
        });
下面一定要写调用的具体接口
ResponseVo<XXXXX> responseVo = XXXXX.XXXX(pin, "127.0.0.1");
log.info("XXXXX.res:{}", GsonUtils.toJson(responseVo));
 

 

方式二:

调用的时候会直接抛出异常信息,如果想让起抛出异常信息,则直接使用这个方式
@Test
public void testMktSaleOrder() throws Exception { String message = "XXXXX"; try {
        //注意下面两行代码的位置不能交换,必须先去定义调用就去抛出异常信息 doThrow(RuntimeException.
class).when(XXXXJSF).asynxxxxeStock(any(XXXXckReq.class)); XXXXX.onMessage(message); } catch (Exception e) { } }

方式三:

@Before
    public void setup() {
        doReturn(1).when(XXXXXDao).insert(any(XXXXXXPo.class));
        doReturn(1).when(xxxDao).updateByxxxxId(any(XXXXXXPo.class));
        when(scoreXXXXDao.queryByIdxxxx(anyString())).then(invocationOnMock -> this.XXXXPo());
        when(scorXXXXDao.queryByConditionXXXX(any(XXXXXPo.class))).then(invocationOnMock -> {
            Page page = new Page();
            page.add(this.xxxxxPo());
            return page;
        });
    }

 方式四:     

        doReturn(216322040L).when(activityDao).insert(any(SaleActivity.class));
    doReturn(230L).when(activityRewardStockDao).insert(any(SaleActivityRewardStock.class)); doNothing().when(activityRewardDao).insert(any(SaleActivityReward.class)); doReturn(40L).when(activityRewardStockDao).insert(any(SaleActivityRewardStock.class)); doNothing().when(activityRewardEnumDao).insert(any(SaleActivityRewardEnum.class)); doNothing().when(bizCacheService).saveActivityInfoToCache(any(RichSaleActivity.class)); doNothing().when(activityDao).update(any(SaleActivity.class));
    doReturn(new ArrayList<SaleActivityRuleConfig>()).when(activityRuleConfigDao).queryRuleList();

 

 方式五:

       when(bizCacheService.cacheGetActivity(anyLong())).then(new Answer<SaleActivity>() {
            @Override
            public SaleActivity answer(InvocationOnMock invocationOnMock) throws Throwable {
                String saleActivityStr = "{\"activityEnum\":\"020302\",\"activityName\":\"4月-白条网易严选权益卡\",\"appShow\":1,\"auditor\":\"sunweiting\",\"auditorTime\":1553778669000,\"budgetNum\":\"SC00190306899\",\"createTime\":1553754196000,\"creator\":\"gaoya39\",\"dayFinishTime\":946742399000,\"dayPartiCount\":1,\"dayStartTime\":946656000000,\"detail\":\"\",\"finishTime\":1555343999000,\"id\":314135082,\"partiCount\":1,\"phone\":\"18301232918\",\"priority\":1,\"startTime\":1554048000000,\"status\":4,\"updateTime\":1555344000000}";
                return JSON.parseObject(saleActivityStr, SaleActivity.class);
            }
        });

  

 

posted on 2020-10-16 11:03  Code2020  阅读(448)  评论(0)    收藏  举报