Mockito - Custom Matcher выбрасывает NPE при попытке сопоставить примитив - PullRequest
2 голосов
/ 14 декабря 2011

Попытка выяснить, как написать собственный сопоставитель для примитивного значения. Скажем, у меня есть следующий пользовательский сопоставитель:

class IsEven extends ArgumentMatcher<Integer> {
    public boolean matches(Object i) {
        return ((Integer) i) % 2 == 0;
    }
}

И я запускаю следующий тест. mocked - это уже смоделированный экземпляр класса, у которого есть метод someMethod:

@Test
public void primatives() {

    mocked.someMethod(2);

    ArgumentMatcher<Integer> customMatcher = new IsEven();

    // ! Throws NPE !
    Mockito.verify(mocked).someMethod(Mockito.argThat(customMatcher));

}

Причиной исключения NullPointerException является то, что метод Mockio.argThat всегда возвращает значение null, которое, как я предполагаю, не может быть автоматически помещено обратно в целое число.

Мне кажется, что этот случай будет обычным делом - какой-нибудь совет?

Спасибо, Рой

Ответы [ 2 ]

7 голосов
/ 14 декабря 2011

.. Чтение Javadoc помогает:

В редких случаях, когда параметр является примитивом, вы должны использовать соответствующий метод intThat (), floatThat () и т. Д. Таким образом вы избежите исключения NullPointerException во время автоматической коробки.

0 голосов
/ 18 ноября 2016

Вы можете использовать doThrow (), doAnswer (), doNothing (), doReturn () и doCallRealMethod () вместо соответствующего вызова with () для любого метода. Это необходимо, когда вы

методы-заглушки методы-заглушки для шпионских объектов (см. ниже) Остановите один и тот же метод более одного раза, чтобы изменить поведение макета в середине теста. но вы можете предпочесть использовать эти методы вместо альтернативы with () для всех ваших вызовов-заглушек.

   when(mock.foo()).thenThrow(new RuntimeException());

   //Impossible: the exception-stubbed foo() method is called so RuntimeException is thrown.
   when(mock.foo()).thenReturn("bar");

   //You have to use doReturn() for stubbing:
   doReturn("bar").when(mock).foo();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...