スタブのvoidメソッドのメソッド本体をどのように置き換えることができますか?このような 何か:副作用を伴うmockitoのvoidメソッドのスタブ
interface Foo {
void foo(Integer j);
}
(...)
Foo mockFoo = mock(Foo.class);
Answer<Void> ans = invocation -> {
Object[] args = invocation.getArguments();
System.out.println("called with arguments: " + Arrays.toString(args));
return null;
};
when(mockFoo.foo(any())).thenAnswer(ans);
(...)
mockFoo.foo(5) // Should print out "called with arguments: [5]"
パラメータにアクセスできるように、そしてそれらのパラメータを使用して、いくつかのコードを実行できることが重要です。
我々はdoAnswer(ans).when(mockFoo).foo(any());
を試してみましたが、モックを設定するときには、ANSラムダ数回のボディを実行するようで、それが.when(mockFoo)
と.foo(any())
呼び出しの間にいくつかの奇妙な理由で、「ヌル」に当社mockFoo変数をリセットします。
だから、効果的に:
Foo mockFoo = mock(Foo.class)
// mockFoo is an instance of a Foo$MockitoMock
Foo o = doAnswer(ans).when(mockFoo);
// mockFoo just became null at this point..?!
o.foo(any());
P.S.テストを実行するためにVertxUnitRunnerを使用していますが、問題はMockitoJUnitRunnerでも同じです。
おかげで、コメントで解決 アコス・Vandra
http://stackoverflow.com/questions/2276271/how-to-make-mock-to-void-methods-with-mockito – pringi
あなたが持っているものは正しいですし、確かに理由はありません 'mockFoo'リセットする必要があります。あなたが投稿したスニペットではなく、実際のテストボディセットアップを教えてください。あなたが投稿したコードではなく、そこに問題があると感じています。 –
@JeffBowmanあなたは正しいです。私の実際のテストでは、原因と思われるintのパラメータとしてany()を指定していました。それをanyInt()に置き換えることで問題は解決されました。 –