gpt4 book ai didi

java - Mockito 中的调用目标异常

转载 作者:行者123 更新时间:2023-12-02 08:48:02 25 4
gpt4 key购买 nike

我在我的测试用例中遇到了 InitationTarget 异常。这是我要测试的类(class):

public class UpdateHandler implements Handler {
public void process(UE m, UEC u) {
try {
Info info = facade1.queryInfo(string).getInfo();
Index index = facade2.findindex(string2);
if(facade3.isWhitelisted() {
facade2.update(info, index);
}
} catch(UpdateException e) {
//log
}
}

这是我的测试文件

public class TestFile {
@Mock
protected Facade1 facade1;

@Mock
protected Facade2 facade2;

@Mock
protected Facade3 facade3;

private Info info;
private Index index;

@InjectMocks
private UpdateHandler updatehandler;

@BeforeMethod
public void beforeTest() {
MockitoAnnotations.initMocks(this);
}

@Test
public void Test1() {
info = getInfo();
index = getIndex();
updateHandler.process(UEprepare(), null);
Mockito.when(facade1.queryInfo(Mockito.anyString()).getInfo()).thenReturn(getInfo());
Mockito.when(facade2.findindex(Mockito.anyString()).thenReturn(getIndex());
Mockito.when(facade3.isWhitelisted()).thenReturn(true);
Mockito.verify(facade1, Mockito.times(1).update(info, index);
}
}

getInfo() 和 getIndex() 是我在测试文件中创建的两个方法,只是为了创建 Info 和 Index 的示例对象。 UEprepare是一种准备UE样本对象的方法。 UM 可以为空。我已经检查过这不是问题。

我收到的错误是空指针异常。具体来说,facade1.queryInfo(string)的值为null。它应该是一个 InfoResult 类型的对象,我可以从中提取 Info.我检查了 queryInfo 方法,它不会在任何地方抛出 NPE。它只抛出 UpdateException 类型的异常,我已经在 try catch 的代码中处理了该异常。

当我深入挖掘时,我发现了一个 InitationTargetException。我无法具体理解该异常来自何处,但我认为它与 queryInfo 方法有关。

我已经为我正在使用的所有外观初始化了模拟,并且我认为我也正确使用了 InjectMocks,所以我陷入了如何调试它的困境。

最佳答案

您的代码中有 2 个错误:

方法顺序

你有:

  • 调用被测方法
  • 设定期望Mockito.when
  • 验证期望Mockito.verify

虽然应该是

  • 设定期望Mockito.when
  • 调用被测方法
  • 验证期望Mockito.verify

链式期望

Mockito.when(facade1.queryInfo(Mockito.anyString()).getInfo()).thenReturn(getInfo());

您需要对 queryInfo 调用的结果进行额外的模拟,比方说 @Mock QueryInfo queryInfo。然后,您需要两次调用来设置此期望:

Mockito.when(facade1.queryInfo(Mockito.anyString()).thenReturn(queryInfo);
Mockito.when(queryInfo.getInfo()).thenReturn(getInfo());

关于java - Mockito 中的调用目标异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60956275/

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