Сопоставитель аргументов Mockito для Map, который может быть нулевым - PullRequest
0 голосов
/ 25 октября 2018

Я конвертирую некоторые тесты из Mockito 1.x в 2.15.0.

Работа с новой обработкой «нулевых» значений была относительно простой для параметров String.Кажется, это немного сложнее для параметров Map, но я думаю, что у меня возникнет та же проблема с любым типом, использующим параметры типа.

Я пробовал следующие альтернативы:

  1. anyMap()
  2. isNull()
  3. nullable(Map.class)
  4. (Map<KeyType,ValueType>) nullable(Map.class)

Первым был оригинал до 2.х преобразование.Не совпадает, если значение равно нулю.Второе работает, если значение всегда нулевое, но мне это не нравится, так как в тесте пропускается информация о типе.Третий кажется правильным, но не компилируется, так как формальный тип параметра использует обобщенные значения.Четвертый работает, но мне не нравится, что там есть актеры.

Есть ли более чистое решение для этого?

1 Ответ

0 голосов
/ 25 октября 2018

Используйте any() для этого.В отличие от any(Class<T> clazz) или anyMap(), Mockito позволяет any соответствовать null как значению.

Для исторически любопытных: Брайс объясняет этимологию здесь .any(T.class) выглядит как «любой T», для которого null имеет меньше смысла, а any(T.class) принимает ту же instanceof -подобную семантику, что и isA(T.class).any() по-прежнему правильно означает «любое значение», включая null.

Существуют и другие решения, такие как or(isNull(), anyMap()), но они избыточны: Java гарантирует, что единственными допустимыми значениями будут null или должным образом универсальная Карта, и в Java 8 и выше вывод улучшился до такой степени, что Java будет правильно выводить вашу Карту, включая обобщенные.

См. также: В чем разница между Mockito Matchers isA, любой, экв, и тот же?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...