bra*_*yne 2 java tdd mocking matcher mockito
Foo mockFoo1 = mock(Foo.class);
Foo mockFoo2 = mock(Foo.class);
when(((Foo) any()).someMethod()).thenReturn("Hello");
Run Code Online (Sandbox Code Playgroud)
在上面的示例代码中,第3行失败并出现NullPointerException.为什么这样?
我的想法是:
EITHER .. any()应该用于匹配参数,而不是匹配触发方法的对象.
OR .. any()仅适用于真实的具体对象,而不适用于mock对象.
你需要这样做:
Foo mockFoo1 = mock(Foo.class);
Foo mockFoo2 = mock(Foo.class);
when(mockFoo1).someMethod().thenReturn("Hello");
when(mockFoo2).someMethod().thenReturn("Hello");
Run Code Online (Sandbox Code Playgroud)
any()(anyObject()的较短别名)是一个匹配任何参数的Mockito参数匹配器,只应按如下方式使用:
when(mockFoo1.someMethod(any())).thenReturn("Hello");
Run Code Online (Sandbox Code Playgroud)
any()返回null,因此您的代码等效于
when(((Foo) null).someMethod()).thenReturn("Hello");
Run Code Online (Sandbox Code Playgroud)