Я новичок в JMockit.Недавно я пытался написать модульные тесты, где я должен тестировать системный метод, который принимает аргумент.Внутри тестируемого метода экземпляр аргумента объединяет несколько своих методов для возврата объекта Collection.
Приведенный ниже код имитирует точную ситуацию, с которой я сталкиваюсь.Я использую jmockit-1.9
Тестируемая система
public class SystemUnderTest {
public void doSomething(Dependency dependency) {
List<String> list = dependency.getMap().get("some-key");
System.out.println("got list -> " + list);
}
}
Класс зависимости
public class Dependency {
private Map<String, List<String>> map;
public Map<String, List<String>> getMap() {
return map;
}
public void setMap(Map<String, List<String>> map) {
this.map = map;
}
}
Тест
@Test
public void testDoSomething(
@Mocked Dependency dependency,
@Mocked Map<String, List<String>> map,
@Mocked List<String> list
) {
new NonStrictExpectations() {{
dependency.getMap(); result = map;
map.get(anyString); result = list; //exception occurs here
}};
SystemUnderTest sut = new SystemUnderTest();
sut.doSomething(dependency);
}
Когда я запускаю тест, я получаю следующее исключение
java.lang.IllegalArgumentException: Invalid return value for method returning class java.util.HashMap
в этой строке
map.get(anyString); result = list;
Как ясно видно, тип возвращаемого значения map.get()
должен быть List
, но он говорит, что метод возвращает HashMap
.
Что я делаю не так?
Любая помощь будет оценена;