【发布时间】:2018-01-03 11:21:28
【问题描述】:
我有以下代码:
@Test(expected = IllegalArgumentException.class)
public void failureTest() {
testedObject.supposedToFail("");
testedObject.supposedToFail(null);
}
运行此程序时,我无法保证会抛出带有null 参数的IllegalArgumentException。事实上,每当 JUnit 遇到第一个异常时,它就会停止整个方法的运行。
考虑到我必须为这个类尝试的测试用例数量(约 20 个),我怀疑编写 20 个方法,每个方法都期望一个特定的异常(虽然它们通常是相同的)是有效的。
有什么方法可以尝试一次抛出特定异常的每个方法? (例如,对于我的示例,您将通过这两种方法)
谢谢
【问题讨论】:
-
"运行此程序时,我无法保证我会抛出带有
null参数的IllegalArgumentException。" 为什么不呢?在单元测试中,测试代码应该根据输入和设置以完全相同的方式运行。 -
@Timothy 因为 @Expected 注释以这种方式工作。当它捕获第一个
IllegalException时,它认为整个测试方法已完成并跳过其他所有内容。 -
@YassineBadache 您的生产代码如何在一次调用中抛出多个异常*?
-
我认为你没有得到这个测试的目标。如果您的 String 参数为
null或为空,请使用引发异常的代码。您可以测试您的参数是否为空或为空。这使得有两个案例可以尝试。如果您的类包含 10 个预期这种行为的方法,我应该编写 20 个单元测试吗?这里的目标是在单个测试方法中尝试所有抛出此异常的方法。下面的答案似乎令人满意,我会试一试。
标签: java exception junit expected-exception