關於Mockito學習的一點自己的理解
阿新 • • 發佈:2020-10-16
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 = newGenericResult<>(); 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; }); }