jmockit—模拟方法链,其中一个方法使用@Cascading返回集合
我正在尝试模拟一个方法调用,该调用如下所示:jmockit—模拟方法链,其中一个方法使用@Cascading返回集合,jmockit,Jmockit,我正在尝试模拟一个方法调用,该调用如下所示: rapContext.getSysInfo().get(key) getSysInfo()方法返回ConcurrentHashMap 以下是我所做的: Class ABCTest { @Cascading RapContext context; @Test doTest() { new Expectations() { { rapContext.getSysInfo().get
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(),一切正常
我不确定我错过了什么
谢谢代码示例不完整,但是您可能会遇到与意外模拟地图相关的问题。如果地图(或集合框架的任何部分)被模拟,那么很多东西都会被破坏。我无法重现您的问题,因为任何使用@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);
}
}
公共类RapContextTest{
@可注射的ConcurrentHashMap-mockedMap;
@试验
公共void testContext(){
RapContext=新的RapContext();
新模型(){
@嘲弄
公共ConcurrentHashMap getSysInfo(){
返回mockedMap;
}
};
新的非严格测量(){
{
mockedMap.get(anyString);
结果=“成功”;
}
};
对象值=context.getSysInfo().get(“测试”);
系统输出打印项次(值);
}
}
请发布完整的代码示例。这甚至不能像这里所示进行编译,因为从来没有声明过rapContext
。