3
我有一個用例,我試圖確保在我的類中調用特定方法時引發了抽象異常。使用Mockito是否可以拋出抽象異常?
我使用的Mockito要做到這一點,但已經注意到,是的Mockito根本就沒有拋出異常被調用方法時。
類來進行測試:
public void doSomething() throws CustomException {
try {
Collection<T> results = dao.getDatabaseResults();
} catch (ProblemException e) {
throw new CustomException("There was an exception", e);
}
}
問題Exception類:
public abstract class ProblemException extends RuntimeException {
public ProblemException(String message) {
super(message);
}
public ProblemException(String message, Throwable e) {
super(message, e);
}
測試類:
public testDoSomething() throws Exception {
CustomDAO mockDAO = Mockito.mock(CustomDAO.class);
Mockito.when(mockDAO.getDatabaseResults()).thenThrow(new ProblemException);
try {
foo.doSomething();
Assert.fail();
} catch (CustomException e) {
//Some more asserts
}
目前上述測試類不能編譯,因爲你可以」創建一個抽象類的新實例。
我沒有獲得改變AbstractException類,我也不能更改由getDatabaseResults在DAO類()方法拋出的異常類型。
你對這個問題的乾淨的解決方案有什麼建議?
有一件事我能想到的是趕上我的doSomething()方法中的一個RuntimeException(如ProblemException擴展此類)。我只是好奇,如果有更好的方法?
感謝
非常好,非常感謝。不敢相信我之前沒有想過這樣做!我認爲我可能會採用第二個建議,以保護自己免受抽象類未來在某個時間添加其他方法的機會。 – JoshDavies 2013-04-27 14:53:40
我的確認爲'thenThrow'也接受一個類。所以'Mockito.when(mockDAO.getDatabaseResults())。ThenThrow(ProblemException.class);' – bowmore 2013-04-28 08:31:00