Exception JUnit中的多个预期异常

Exception JUnit中的多个预期异常,exception,junit,expected-exception,Exception,Junit,Expected Exception,应用程序正在某些thatMethod()中引发2个不同的异常。我想用JUnit测试一下 我可以使用ExpectedException和@Rule来留出应用程序预期抛出的“自然”异常。 他正在解释这一点 在我的情况下,如何做到这一点——2个或更多“自然”异常ExpectedException未包含多个预期异常 还有其他方法可以做到这一点——如中再次解释的。我想知道是否有办法做到这一点 通过使用JUnit的内置特性 您可以使用收集多个异常,并在测试结束时对其进行验证。但是您必须手动将异常添加到收集器

应用程序正在某些thatMethod()中引发2个不同的异常。我想用JUnit测试一下

我可以使用ExpectedException@Rule来留出应用程序预期抛出的“自然”异常。 他正在解释这一点

在我的情况下,如何做到这一点——2个或更多“自然”异常ExpectedException未包含多个预期异常

还有其他方法可以做到这一点——如中再次解释的。我想知道是否有办法做到这一点
通过使用JUnit的内置特性

您可以使用收集多个异常,并在测试结束时对其进行验证。但是您必须手动将异常添加到收集器中,因为JUnit只能看到您的测试方法,并且在方法执行期间无法执行任何操作。

单个测试方法只能退出一次,因此只能引发单个异常。如果您希望确认您的代码可能以两种不同的方式失败,那么您有两个单独的测试;将它分为两个测试方法,并在每个测试方法上声明特定的异常。

我发现了这种方法,因为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);
    }
}

ErrorCollector将testcase抛出的多个AssertionError堆积起来。我希望JUnit能够识别应用程序可以抛出的多个预期错误,以便在测试期间忽略它们。我希望将多个预期异常放在一边,这样当它们发生时,测试就不会退出。如果在单个测试中确实需要它们,您需要使用显式的
try
/
fail
/
catch
块,如中所示。你会注意到,对这个问题的被高度认可的答案建议将它分成单独的测试;这仍然是我的建议。您可以设置一个公共父异常类型,然后尝试利用。这只适用于测试单个方法的情况(顺便说一下,应该是这样)。虽然不理想,但它仍然可以工作:我使用它来测试针对不同方法参数组合引发的相同异常,但不需要设置单独的测试。