JavaでMockitoを使用するメソッドが他のメソッドへの呼び出しを無視して正確なパラメーターで1回だけ呼び出されたことを確認する方法
サンプルコード:
public class MockitoTest {
interface Foo {
void add(String str);
void clear();
}
@Test
public void testAddWasCalledOnceWith1IgnoringAllOtherInvocations() throws Exception {
// given
Foo foo = Mockito.mock(Foo.class);
// when
foo.add("1"); // call to verify
foo.add("2"); // !!! don't allow any other calls to add()
foo.clear(); // calls to other methods should be ignored
// then
Mockito.verify(foo, Mockito.times(1)).add("1");
// TODO: don't allow all other invocations with add()
// but ignore all other calls (i.e. the call to clear())
}
}
TODO: don't allow all other invocations with add()
セクションで何をすべきですか?
すでに失敗しました:
verifyNoMoreInteractions(foo);
いや。 clear()
などの他のメソッドの呼び出しは許可しません。
verify(foo, times(0)).add(any());
いや。 add("1")
への1回の呼び出しを許可することは考慮されていません。
Mockito.verify(foo, Mockito.times(1)).add("1");
Mockito.verify(foo, Mockito.times(1)).add(Mockito.anyString());
最初のverify
は、パラメーター化された予想される呼び出しを確認し、2番目のverify
は、add
への呼び出しが1つしかなかったことを確認します。
前の答えはさらに簡素化できます。
Mockito.verify(foo).add("1");
Mockito.verify(foo).add(Mockito.anyString());
単一のパラメータverify
メソッドは、times(1)
implementationの単なるエイリアスです。