我正在尝试模拟一个类似这样的方法调用:
rapContext.getSysInfo().get(key)
getSysInfo()方法返回ConcurrentHashMap。
这就是我所做的:
Class ABCTest {
@Cascading RapContext context;
@Test
doTest() {
new Expectations() {
{
rapContext.getSysInfo().get(anyString);
result = new UserPrefCtxObject();
}
}
}
有了这个,我在rapContext.getSysInfo()上得到一个NullPointerException。对getSysInfo()的调用返回null。如果我调用任何其他不返回集合的方法,例如rapContext.getDomain(),一切正常。
我不确定我错过了什么。
由于
答案 0 :(得分:2)
代码示例不完整,但您可能会遇到与意外模拟Map相关的问题。如果一个Map(或Collection框架的任何部分)被嘲笑,那么很多东西都会破坏。我无法重现您的问题,因为任何使用@Cascading模拟RapContext的尝试都会导致堆栈溢出。
您可以部分模拟RapContext,然后返回真实或模拟的地图。当我遇到类似的问题时,我通常会使用@Injectable来模拟一个类的实例或使用部分模拟。
这是一种让你模拟getSysInfo的方法:
public class RapContextTest {
@Injectable ConcurrentHashMap<String, Object> mockedMap;
@Test
public void testContext() {
RapContext context = new RapContext();
new MockUp<RapContext>(){
@Mock
public ConcurrentHashMap getSysInfo(){
return mockedMap;
}
};
new NonStrictExpectations() {
{
mockedMap.get(anyString);
result = "Success";
}
};
Object value = context.getSysInfo().get("test");
System.out.println(value);
}
}