MockitoのMatchers.anyObject()の使い方

MockitoのMatchers.anyObject()は以下のmethodA()のように、あるオブジェクトを引数に持つメソッドが呼び出されたかどうかを、Mockitoで検証する際等に使うことが出来る。

public class MyClass {
    
    private MyField field;
    	
    public void setField(MyField field) {
        this.field = field;
    }
    
    public void methodA(String text) {
        field.methodB(new MyObject(text));
    }
}


具体的な検証コードは以下。

public class MyClassTest {

    MyField mock;
    MyClass sut;

    @Before
    public void setUp() throws Exception {
        mock = mock(MyField.class);
        sut = new MyClass();
        sut.setField(mock);
    }

    @Test
    public void testMethodA() {
        sut.methodA("test");
        // methodA()を呼び出すとその先でMyFieldのmethodB()が呼び出される事を検証
        verify(mock).methodB((MyObject)anyObject());
    }

}


なお、検証コードを以下のようにしても良さそうなのだが、実際にmethodB()が呼び出された際に渡されたオブジェクトと同一のインスタンスでは無いため、以下はエラーとなってしまう。このような場合にMatchers.anyObject()が使える。

verify(mock).methodB(new MyObject("test"));