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);
}
});