应用程序在someMethod()中抛出2个不同的异常。我想通过JUnit测试它。
我可以使用 ExpectedException 和 @Rule 来预留应用程序应该抛出的“自然”异常。 How do you assert that a certain exception is thrown in JUnit 4 tests?正在解释这一点。
我怎么能在我的情况下做到这一点 - 2个或更多“自然”例外? ExpectedException 没有多个预期的例外情况。
还有其他方法可以做到这一点 - 正如How do you assert that a certain exception is thrown in JUnit 4 tests?中再次解释的那样。我想知道是否有办法做到这一点 通过使用JUnit的内置功能。
答案 0 :(得分:3)
单个测试方法只能退出一次,因此只能抛出一个异常。如果您希望确认您的代码可能以两种不同的方式失败,那么您有两个单独的测试;将其拆分为两个测试方法,并在每个方法上声明特定的异常。
答案 1 :(得分:1)
您可以使用ErrorCollector收集多个例外,并在测试结束时对其进行验证。但是您必须手动将异常添加到收集器,因为JUnit只能看到您的测试方法,并且在方法执行期间无法执行任何操作。
答案 2 :(得分:1)
我发现这种方式是因为JUnit函数只接受一个例外。
@Test
public void checkRuleValidation() {
Rule rule = generateRules(1, "rule.json").get(0);
// rule name validation
rule.setRuleName(null);
try {
ruleResource.saveRule(rule);
// expecting exception if no assert false
assertTrue(false);
} catch (BadRequestException br) {
assertTrue(true);
}
//validating rule action
rule.setRuleAction(null);
try {
ruleResource.saveRule(rule);
// expecting exception if no assert false
assertTrue(false);
} catch (AuthorizationException br) {
assertTrue(true);
}
}