首页 文章

JUnit中有多个预期的异常

提问于
浏览
4

该应用程序在someMethod()中抛出两个不同的异常 . 我想通过JUnit测试它 .

我可以使用 ExpectedException@Rule 来预留应用程序应该抛出的"natural"异常 . How do you assert that a certain exception is thrown in JUnit 4 tests?正在解释这一点 .

我怎么能这样做 - 2个或更多“自然”例外? ExpectedException 未持有多个预期的例外情况 .

还有其他方法可以做到这一点 - 如_2474720中所述 . 我想知道是否有办法通过使用JUnit的内置功能来做到这一点 .

3 回答

  • 1

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

  • 1

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

  • 3

    我发现这种方式是因为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);
        }
    }
    

相关问题