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

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

我对此的想法:

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

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

4

1 回答 1

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");
于 2011-06-21T00:08:51.647 回答