Mockito を使用してクラスをテストしています。Mockito の別のモック オブジェクト内にモックを挿入する方法がなかったため、ディープ スタブを使用しようとしています。
class MyService{
@Resource
SomeHelper somehelper;
public void create()
{
//....
somehelper.invokeMeth(t);
}
}
class SomeHelper{
@Resource
private WebServiceTemplate webServiceTemplate;
public void invokeMeth(T t)
{
try{
//...
webServiceTemplate.marshalSendAndReceive(t);
}catch (final WebServiceIOException e) {
throw new MyAppException("Service not running");
}
}
}
今、私は MyService クラスの create() メソッドを単体テストしようとしています。次のように SomeHelper のモックを注入しました
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
SomeHelper somehelper;
私が今欲しいのは、モックされた somehelper オブジェクトで invokeMeth() メソッドが呼び出されたときに、この場合は実際のメソッドを呼び出すことです。
when(somehelper.invokeMeth(isA(RequestObject.class)))
.thenCallRealMethod();
この場合、webServiceTemplate が null ではないことを期待していました。
ただし、コードが行を実行しようとすると、Nullpointer 例外が発生します
webServiceTemplate.marshalSendAndReceive(t);
ディープ モック オブジェクト (つまり、モック内のモック - この場合は somehelper モック内の webserviceTemplete モック) にアクセスし、 when 条件を適用して WebserviceIOException をスローする方法の手がかりはありますか? MyService.create() をテストして、WebServiceIOException がコードにスローされたときに適切に動作することを確認できるように、これが必要です。