Я пытаюсь высмеять класс и вернуть разбитый список объектов при вызове метода на издеваемом объекте. Давайте рассмотрим следующий код:Mockito не правильно обрабатывает методы, беря список в качестве аргумента
interface MyRepositry{
public List<MyClass> getMyClassInstances(String str,Long id,List<Integer> statusList);
}
Я насмешливо выше метод ivocation следующим образом:
when(myRepository.getMyClassInstances("1234", 200L, stubbedList)).thenReturn(stubbedMyClassInstanceList);
где
stubbedList
это список я создаю, вставив два целых числа 1 и 3. В real call также передаю список, который я строю, который имеет целые числа 1 и 3. Точка ot note здесь является объектом stubbedList, а объект списка в реальном вызове отличается, но всегда содержит два целых числа 1 и 3.
stubbedMyClassInstanceList
- это искомый список экземпляров MyClass.
Однако mockito возвращает пустой список, когда я запускаю тест. Я сделал некоторые отладки, и я думаю, Mockito не в состоянии соответствовать объект списка, который я использую в
when(..).thenReturn(..)
вызова и фактического вызова и, следовательно, не найти правильную подпись.
Я не могу использовать
anyList()
Искателя, как я всегда прохожу список из двух целых чисел (1 и 3).
Я решил проблему с помощью пользовательского
ArgumentMatcher
следующим образом:
class StatusMatcher extends ArgumentMatcher<List> {
public boolean matches(Object list) {
List statuses = ((List) list);
return (statuses.size() == 2 && statuses.contains(1) && statuses.contains(3));
}
}
Так что вопрос:
1) Является ли мое предположение о том, почему раскорчевке/не насмешливой правильная работа? 2) и является ли решение, которое я использовал правильно?
Просьба предоставить полный (но простой) рабочий пример, демонстрирующий проблему. – Tunaki
Я не могу предоставить фактический код, поскольку он лицензирован для компании, над которой я работаю. Однако я дал минимальный код. Я могу объяснить больше, если вы не найдете какой-либо из приведенных выше объяснений кода достаточно. –