我是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
。
我在做什么错了?
任何帮助将不胜感激;