Использование Matchers.isNull () для общих классов

1

Я использую Mockito для тестирования такого метода:

myMethod(String s, List<Integer> i);

Я использую этот вызов:

doReturn(foo).when(bar).myMethod(anyString(), isNull(List.class))

Использование метода isNull(Class<?> class) - вот моя проблема. Поскольку я использую anyString(), который является Matcher, я не могу просто передать null.

Теперь я получаю предупреждение о type safety из-за использования универсального класса. Я могу избавиться от него, используя @SuppressWarning Annotation.

Эта проблема больше связана с Java, чем с Mockito, но я хотел бы предоставить пример использования, где я не могу просто использовать экземпляр List для передачи его методу.

То, что я хотел бы знать на первом месте, - это чистый способ избавиться от предупреждения. Поскольку кастинг (generics, eraser) не является вариантом.

Теги:
generics
mockito
java-7

1 ответ

3
Лучший ответ

Используйте общую версию Matchers.eq():

doReturn(foo).when(bar).myMethod(anyString(), Matchers.<List<Integer>> eq(null))

Используя Java 7, вы должны добавить свидетеля типа <List<Integer>> чтобы помочь компилятору полностью понять это. В Java 8 это не требуется. Для получения дополнительной информации об этом конкретном аспекте см. Нижние абзацы этой страницы.

  • 0
    Это не работает, потому что eq (...) возвращает Object. Компилятор не позволит мне сделать это без приведения.
  • 0
    @SteveBenett Извините, я использовал Java 8, который скомпилировал это без проблем. Я вижу, что вы используете Java 7.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню