使用JUnit Theory时会出现异常

时间:2012-10-24 13:35:27

标签: java testing exception-handling junit junit4

在JUnit 4中,您可以使用@Test(expected = SomeException.class)注释声明预期的异常。但是,使用Theories完成测试时,@Theory注释没有期望的属性。

在测试理论时声明预期异常的最佳方法是什么?

2 个答案:

答案 0 :(得分:5)

我更喜欢使用ExpectedException rule

import org.junit.rules.ExpectedException;

<...>

@Rule
public ExpectedException thrown = ExpectedException.none();

@Theory
public void throwExceptionIfArgumentIsIllegal(Type type) throws Exception {
    assumeThat(type, equalTo(ILLEGAL));
    thrown.expect(IllegalArgumentException.class);
    //perform actions
}

答案 1 :(得分:1)

您也可以使用普通assert。您可以在较旧版本的JUnit上使用它(4.9之前)。

@Test
public void exceptionShouldIncludeAClearMessage() throws InvalidYearException {
    try {
        taxCalculator.calculateIncomeTax(50000, 2100);
        fail("calculateIncomeTax() should have thrown an exception.");
    } catch (InvalidYearException expected) {
        assertEquals(expected.getMessage(),
                     "No tax calculations available yet for the year 2100");
    }
}