gpt4 book ai didi

java - 如何在返回 void 并引发异常的方法上执行 doThrow 或 thenThrow

转载 作者:行者123 更新时间:2023-12-01 19:44:25 26 4
gpt4 key购买 nike

我有一个方法process,它返回void,也可能抛出异常。我想验证在调用 process 时其他方法 run 的行为方式以及在发生异常时如何处理异常。

我尝试使用doThrow(),但它告诉我“检查的异常对此方法无效!”。然后我尝试使用 thenThrow() 但它需要一个 not void 函数。

代码:

public void run() {
for (var billet : getBillets()) {
try {
process(billet);
billet.status = "processed";
} catch (Exception e) {
billet.status = "error";
}

billet.update();
}
}

public void process(Billet billet) throws Exception {
var data = parse(billet.data); // may throw an exception
var meta = data.get("meta"); // may throw an exception

// ... more parsing ...

new Product(meta).save();
new Item(meta).save();

// ... more operations ...
};

测试:

var billet1 = new Billet();
var billet2 = new Billet();

doThrow(new Exception()).when(myInctance).process(billet2);
myInctance.run();
assertEquals("processed", billet1.status);
assertEquals("error", billet2.status);

// ... some checks ...

我预计测试会成功。

最佳答案

这是告诉模拟抛出异常的正确方法:

Mockito.doThrow(new SomeException()).when(mock).doSomething()

正如 Hulk 在注释中所说,此异常需要与方法签名匹配,否则,您将得到一个 MockitoException("Checked exception is invalid for this method!")

您可以通过抛出某种类型的RuntimeException来解决该异常。最后,您应该尽量避免使用通用的Exception。抛出适当的命名异常要有用得多。

关于java - 如何在返回 void 并引发异常的方法上执行 doThrow 或 thenThrow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54020425/

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