关于java:JUNIT – 断言异常

JUNIT - Asserting Exceptions

本问题已经有最佳答案,请猛点这里访问。

我正在使用JUnit 4。我试图使用下面的代码断言异常,但它没有起作用。

1
2
3
@Rule
public ExpectedException thrown = ExpectedException.none();
thrown.expect(ApplicationException.class);

但是,当我使用下面的注释时,它工作并通过了测试。

1
@Test(expected=ApplicationException.class)

如果我错过了什么,请告诉我。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import org.junit.Rule;
import org.junit.rules.ExpectedException;

public class Test
{

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

    @org.junit.Test
    public void throwsIllegalArgumentExceptionIfIconIsNull()
    {


        exception.expect(IllegalArgumentException.class);
        toTest();
    }

    private void toTest()
    {
        throw new IllegalArgumentException();
    }
}


另一种方法(更简单?)使用规则的方法是在调用之后放置一个fail(),您希望在调用中出现异常。如果得到异常,测试方法就会成功(永远不会失败)。如果您没有得到异常,并且到达fail()语句,那么测试将失败。


下面的代码是使用异常规则的最小示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test
{

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

    @org.junit.Test
    public void throwsIllegalArgumentExceptionIfIconIsNull()
    {
        exception.expect(IllegalArgumentException.class);
        toTest();
    }

    private void toTest()
    {
        throw new IllegalArgumentException();
    }
}

另请参见(关于规则的wiki条目)