クラスで特定のメソッドが呼び出されたときに抽象例外がスローされるようにするユースケースがあります。
これを行うために Mockito を使用していますが、メソッドが呼び出されているときに Mockito が単に例外をスローしていないことに気付きました。
テストするクラス:
public void doSomething() throws CustomException {
try {
Collection<T> results = dao.getDatabaseResults();
} catch (ProblemException e) {
throw new CustomException("There was an exception", e);
}
}
問題の例外クラス:
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 クラスを変更するアクセス権がありません。また、DAO クラスの getDatabaseResults() メソッドによってスローされる例外タイプを変更することもできません。
この問題の最もクリーンな解決策について何か提案はありますか?
考えられることの 1 つは、doSomething() メソッド内で RuntimeException をキャッチすることです (ProblemException がこのクラスを拡張するため)。もっと良い方法があるかどうか興味がありましたか?
ありがとう