使用Matchers.any()匹配模拟对象

时间:2011-06-20 22:14:53

标签: java tdd mocking mockito matcher

Foo mockFoo1 = mock(Foo.class);
Foo mockFoo2 = mock(Foo.class);
when(((Foo) any()).someMethod()).thenReturn("Hello");

在上面的示例代码中,第3行因NullPointerException而失败。为什么这样?

我对此的想法:

EITHER .. any()应该用于匹配参数,而不是匹配触发方法的对象。

OR .. any()仅适用于真实的具体对象,而不适用于mock个对象。

1 个答案:

答案 0 :(得分:7)

你需要这样做:

Foo mockFoo1 = mock(Foo.class);
Foo mockFoo2 = mock(Foo.class);
when(mockFoo1).someMethod().thenReturn("Hello");
when(mockFoo2).someMethod().thenReturn("Hello");

any()(anyObject()的较短别名)是一个匹配任何参数的Mockito参数匹配器,只应按如下方式使用:

when(mockFoo1.someMethod(any())).thenReturn("Hello");

any()返回null,因此您的代码等同于

when(((Foo) null).someMethod()).thenReturn("Hello");