Mockito, verify и HashMap: Аргумент (ы) разные - PullRequest
0 голосов
/ 27 февраля 2020

Написание такого теста с использованием Mockito verify:

verify(myClass, times(1)).myMethod("string_param", ObjectUtil.map("map_param_1", "value", "map_param_2", "10"))

(ObjectUtil.map - это метод util, который возвращает LinkedHashMap<String, Object>)

Я получаю эту ошибку:

Аргумент (ы) разные! Требуются: myClass.myMethod ("string_param", (LinkedHashMap) {map_param_1 = значение, map_param_2 = 10}); -> at ...

Фактический вызов имеет разные аргументы: myClass.myMethod ("string_param", (HashMap) {map_param_1 = value, map_param_2 = 10});

Looking на ошибку я бы сказал, что equals терпит неудачу, потому что с одной стороны есть LinkedHashMap, а с другой - HashMap, но изменение типа не решает проблему, и параметры выглядят точно так же, что это может быть?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Проблема в том, что у вас есть два экземпляра карты. В этом случае вам пришлось создать переменную Map, а затем использовать ее при выполнении метода и при проверке. Тогда вы бы сравнили один экземпляр. Решение:

String param = "string_param";
Map<> map = ObjectUtil.map("map_param_1", "value", "map_param_2", "10");
myClass.myMethod(param, map);
verify(myClass, times(1)).myMethod(param , map);

Попробуйте использовать функциональность any(), если хотите проверить, был ли выполнен метод независимо от параметров. import stati c org.mockito.ArgumentMatchers.any;

verify(myClass).myMethod(any(String.class), any(LinkedHashMap.class));

Был выполнен ровно один раз:

verify(myClass, times(1)).myMethod(any(String.class), any(LinkedHashMap.class));
0 голосов
/ 27 февраля 2020

Я решил, потратив пару часов, и подумал, что такое поведение Mockito немного сложнее.

Проблема была вызвана несоответствием типов значений Карт что в тесте я передал как "map_param_2", а "10" как String, в то время как при реальном вызове этого метода параметр был передан как простое int, но, глядя на сообщение, невозможно понять разницу, потому что в обоих случаях написано map_param_2=10.

После того, как я поднялся на несколько зеркал, я записал пользовательское сопоставление, используя argThat Mockito и циклически изменяя параметры карт, и заметил, что они были разных типов.

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