gpt4 book ai didi

jmockit - 模拟方法链,其中一个方法使用 @Cascading 返回一个集合

转载 作者:行者123 更新时间:2023-12-04 16:42:00 27 4
gpt4 key购买 nike

我试图模拟一个方法调用,它是这样的:

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() 一切正常。

我不确定我错过了什么。

谢谢

最佳答案

代码示例并不完整,但是您可能会遇到一些与意外模拟 Map 相关的问题。如果 Map(或 Collection 框架的任何部分)被模拟,那么很多事情都会中断。我无法重现您的问题,因为任何使用 @Cascading 模拟 RapContext 的尝试都会导致堆栈溢出。

你可以部分模拟 RapContext,然后返回一个真实的或模拟的 Map。当我遇到类似的问题时,我通常使用 @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);

}
}

关于jmockit - 模拟方法链,其中一个方法使用 @Cascading 返回一个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16745242/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com