我想測驗 requestListServiceImpl 這個類。它包含 requestListDao。
RequestListServiceImpl 代碼
@Override
public PageInfo<RequestList> getAllRequest(int startPage, int pageSize, String accountName,String userName) {
PageHelper.startPage(startPage, pageSize);
List<RequestList> list=requestListDao.getAllRequest(accountName,userName);
for(RequestList requestList:list) {
switch (requestList.getStatus()) {
case "0":
requestList.setStatus("Waiting");
break;
case "1":
requestList.setStatus("Closed");
break;
case "2":
requestList.setStatus("Cancel");
break;
default:
requestList.setStatus("NAN");
break;
}
}
PageInfo<RequestList> pageInfo = new PageInfo<RequestList>(list);
return pageInfo;
}
@Override
public void createRequest(RequestList requestList) {
Integer coount=requestListDao.getTime(requestList.getCreateName());
// AWSSnsUtil.sendMassageToSns(requestList.getAccountName());
requestList.setTime( coount);
requestListDao.createRequest(requestList);
}
測驗代碼:
@InjectMocks
RequestListServiceImpl requestListServiceImpl;
@Mock
RequestListDao requestListDao;
@Before
public void setup(){
MockitoAnnotations.openMocks(this);
}
@Test //it's ok
public void testGetAllRequest() throws Exception {
RequestList r=new RequestList();
r.setStatus("0");
when(requestListDao.getAllRequest(anyString(), anyString())).thenReturn(Arrays.<RequestList>asList(r));
PageInfo<RequestList> res=requestListServiceImpl.getAllRequest(1,1,"1","1");
Assert.assertNotNull(res);
}
@Test //this test is error, the error is requestListServiceImpl is not mock.
public void testCreateRequest() throws Exception {
when(requestListDao.getTime(anyString())).thenReturn(0);
RequestList r=new RequestList();
r.setCreateName("demo");
requestListServiceImpl.createRequest(r);
verify(requestListServiceImpl).createRequest(r);
}
錯誤資訊
org.mockito.exceptions.misusing.NotAMockException:
Argument passed to verify() is of type RequestListServiceImpl and is not a mock!
Make sure you place the parenthesis correctly!
See the examples of correct verifications:
verify(mock).someMethod();
verify(mock, times(10)).someMethod();
verify(mock, atLeastOnce()).someMethod();
當我將@InjectMocks 更改為@Mock 時,第二次測驗沒問題,但首先測驗它是錯誤的。我需要添加到存根when(requestListServiceImpl.getAllRequest(anyInt(),anyInt(),anyString(),anyString())).thenReturn(new PageInfo<>());
我不知道該怎么做
是否需要注入模擬?
uj5u.com熱心網友回復:
這里:
verify(requestListServiceImpl)
和
@InjectMocks
RequestListServiceImpl requestListServiceImpl;
資訊非常明確:您驗證 Mockito 為您創建的模擬物件。
@InjectMocks并沒有創造嘲弄。而是將測驗類中的模擬注入到真實物件中。
所以,這里有什么必要:閱讀手冊或教程。意思是:不要立即將 Mockito 應用到您的專案中。相反,退后一步,查看簡單的示例以了解應該如何使用它。
在您當前的設定中:requestListServiceImpl是一個真實的物件。因此,您應該檢查該類是否為您提供了驗證其內部狀態的方法。你對它觸發了一些動作,但因為它是一個真實的物件,Mockito 不知道你做了什么。但是如何真正解決這個問題取決于你的代碼庫。
uj5u.com熱心網友回復:
你想測驗requestListServiceImpl你應該使用@InjectMocks 所以mockito 呼叫真正的方法requestListServiceImpl。使用@Mock 時,默認情況下不會呼叫該方法。
@InjectMocks將與您自己創建的相同new requestListServiceImpl(mock(requestListDao))
當您使用時,verify(mock).someMethod();您必須將模擬傳遞給該方法,而不是@InjectMocks。您想驗證是否在 test( requestListServiceImpl)下的類中的模擬上呼叫了某個方法。
除了@InjectMocks,還有@Spy,它可以兼具這兩種功能,您可以在其中模擬方法,requestListServiceImpl也可以呼叫真正的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359932.html
下一篇:嘗試進行模擬測驗,但有一個回圈
