これについてグーグルで検索しましたが、関連するものは見つかりませんでした。次のようなものがあります:
Object obj = getObject();
Mockeable mock= Mockito.mock(Mockeable.class);
Mockito.when(mock.mymethod(obj )).thenReturn(null);
Testeable testableObj = new Testeable();
testableObj.setMockeable(mock);
command.runtestmethod();
mymethod(Object o)
ここで、の内部で呼び出される がruntestmethod()
、他のオブジェクトではなく、オブジェクト で呼び出されたことを検証しますo
。ただし、検証に何を入れても、たとえば次のようにすると、常にテストに合格します。
Mockito.verify(mock.mymethod(Mockito.eq(obj)));
または
Mockito.verify(mock.mymethod(Mockito.eq(null)));
または
Mockito.verify(mock.mymethod(Mockito.eq("something_else")));
私はいつもテストに合格しています。どうすればその検証を達成できますか (可能な場合)?
ありがとう。
ベストアンサー1
代替案としてArgumentMatcher
はArgumentCaptor
。
公式の例:
ArgumentCaptor<Person> argument = ArgumentCaptor.forClass(Person.class);
verify(mock).doSomething(argument.capture());
assertEquals("John", argument.getValue().getName());
捕獲者は、@キャプター注釈:
@Captor ArgumentCaptor<Person> captor;
//... MockitoAnnotations.initMocks(this);
@Test public void test() {
//...
verify(mock).doSomething(captor.capture());
assertEquals("John", captor.getValue().getName());
}