gpt4 book ai didi

java - 测试引发异常的方法时验证行为

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

最近,在一次代码审查中,一位同事说“测试不应该有 try-catch block ”。他还向我指出了有关ExpectedException的信息。 ,并且我能够使用它来重写一些对异常数据执行检查的测试。

但是,我遇到了一种情况,我不确定是否可以消除 try-catch。我正在为一个方法编写单元测试,该方法将抛出异常并且,该异常将执行我需要使用 JMockit 验证的一些行为。假设被测试的代码包含类似的内容

try {
...code...
} catch (SomeException e) {
statusMessage.send("Failure", <parameters with some data>);
throw e;
}

JUnit 测试当前看起来像

@Test
public void test() {
... set things up ...
try {
callTheMethod();
fail("No exception thrown");
} catch (Exception e) {
assertEquals(SomeException.class, e.getClass());
}
new Verifications() { {
statusMessage.send("Failure", <expected data>);
} }
}

我找不到摆脱 try-catch 的好方法。就我个人而言,我不认为将它放在那里有什么问题,但如果我不至少尝试摆脱它,我可能会捕获我的同事:) :) :)

failassertEquals 不是必需的。如果有一种简单的方法告诉 JUnit/JMockit 忽略来自 callTheMethod() 的任何异常并继续,那就没问题了——我可以创建另一个测试来检查异常。

是否有一些 JUnit 或 JMockit 功能可以让我完成我想要做的事情?

[注意:经过编辑以明确我正在测试的行为是对模拟对象的调用,而不是静态方法调用。这确实与问题无关。]

最佳答案

从一般意义上来说,您的同事可能是对的,使用 try-catch 来测试异常处理不如使用提供的 ExpectedException 实用程序那么可取。但是,我认为该规则不适用于您的情况;捕获异常,以便您可以验证其他事情是否完全合理。 AFAIK,没有其他方法可以阻止异常传播。

关于java - 测试引发异常的方法时验证行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33771745/

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