我正在使用獨立安裝測試Spring MVC控制器。
控制器從請求中的JSON對象獲取參數。它在將JSON對象轉換爲java對象後調用服務。服務使用JPA將其保存到數據庫,然後更新實體的Id字段並返回控制器。將實體轉換爲JSON後,控制器將JSON響應返回給調用者。
我已經在我的測試類嘲笑服務,並注入到控制器使用@InjectMocks
嘲笑的服務必須在JPA實體的私有SETID方法不能訪問,因爲它是由Hibernate在真實的情景填充。
現在,當我嘲笑服務,我如何存根創建實體的getId方法?
代碼來測試mockservice:
@Test
public void thatAccountCreationRendersAsJson() throws Exception {
doAnswer(new Answer<Boolean>() {
@Override
public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable {
Account account = (Account) invocationOnMock.getArguments()[0];
account.setEnabled(true);
account.setFirstName("bca123");
return Boolean.TRUE;
}
}).when(mockAccountService).registerAccount(any(Account.class),
anyString(), any(BindingResult.class));
現在如何存根賬戶類的getId方法,以便控制器給出標識的JSON響應。
我無法創建一個模擬帳戶對象,因爲它是由控制器從JSON創建併發送到模擬服務。我的模擬賬戶對象沒有使用。
我試圖在上述doAnswer方法使用
Account spier = spy(account);
doReturn(new Long(22)).when(spier).getId();
spier.setFirstName("cba123");
但它不是有效的。
有沒有什麼辦法可以爲任何實例的Account.class的getId方法的所有調用返回22的常量值?
http://code.google.com/p/mockito-python/wiki/Stubbing給出了部分 實例,類級別和靜態方法
這正好符合我的需要,他們存根實例方法的所有實例 但它是蟒蛇。
感謝您回答我的問題。
是的,我們可以做到這一點,並完成測試和功能。但是我們更關心的是,我們如何能夠像Python中的mockito那樣做一些事情。在類級別存根方法,以便它適用於創建的類的所有實例。謝謝。 – user2980548