例外時に異なるパラメーターで再試行する関数をテストしています。以下は疑似コードです。
class Myclass {
public void load(input)
try {
externalAPI.foo(input);
} catch(SomeException e) {
//retry with different parameters
externalAPI.foo(input,input2);
}
外部 API をモックして、junit を使用して上記のコードをテストするにはどうすればよいですか。
@Test
public void testServiceFailover(){
m_context.checking(new Expectations() {{
allowing (mockObjExternalAPI).foo(with(any(String.class)));
will (throwException(InvalidCustomerException));
allowing (mockObjExternalAPI).foo(with(any(String.class),with(any(String.class)));
will (returnValue(mockResult));
}});
}
しかし、上記のテストは、「例外をスローしないメソッド (foo() から) から SomeException をスローしようとした」と言って失敗します。しかし実際には、メソッド foo はそのメソッド シグネチャで SomeException に言及しています。
関数fooのjunitをどのように書くことができますか?