這是我服務的代碼:嘲諷與例外的Mockito:意外的異常錯誤
public class Service {
public Object serviceMethod() throws MyException {
@Autowired
Dao dao;
try {
return dao.dao_method();
} catch (ExceptionFromDaoMethod e) {
throw (new MyException());
}
}
}
我想寫一個簡單的單元測試;這是我的測試案例:
@Mock
Dao dao;
@InjectMocks
Service service;
@Test(expected=MyException.class)
public void shouldReturnMyException throws MyException {
when(service.serviceMethod()).thenThrow(new MyException());
}
測試失敗,因爲我有一個意外的異常:
預期的例外是MyException但 org.mockito.exception.base.MockitoException
爲什麼?解決辦法是什麼?
更新 感謝@Maciej科瓦爾斯基我注意到,我用的是時狀態與一個真正的類,而不是對一個嘲笑一個。 因此,我在單元測試中將註釋@Spy
添加到服務中。
新測試的代碼是:
@Mock
Dao dao;
@InjectMocks
@Spy
Service service;
@Before
MockitoAnnotations.initMocks(this);
@Test(expected=MyException.class)
public void shouldReturnMyException throws MyException {
doThrow(new MyException()).when(service.serviceMethod());
}
但現在我有這樣的問題:
預期的例外是MyException但
你能解釋我爲什麼我的解決方案是錯誤的嗎?此外,在你的解決方案是(service.serviceMethod())或何時(service).serviceMethod()? – PenguinEngineer
現在意外的異常預計爲MyException,但是是 –
PenguinEngineer
您試圖模擬一個不是Mock或Spy的實例,因此這樣做不會影響或引發Mockito異常。是的,當你嘲笑你使用的間諜方法。當(service).serviceMethod();'句法。 –