Использование Matchers.any () для сопоставления с фиктивным объектом - PullRequest
2 голосов
/ 21 июня 2011
Foo mockFoo1 = mock(Foo.class);
Foo mockFoo2 = mock(Foo.class);
when(((Foo) any()).someMethod()).thenReturn("Hello");

В приведенном выше примере кода строка 3 завершается с ошибкой NullPointerException.Почему так?

Моя мысль по этому поводу:

EITHER .. any() следует использовать для сопоставления параметров, а не сопоставления объектов, для которых запускаются методы.

ИЛИ.. any() работает только для реальных бетонных объектов, а не mock объектов.

1 Ответ

7 голосов
/ 21 июня 2011

Вам необходимо сделать:

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 () возвращает ноль, поэтому ваш код был эквивалентен

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