关于java:JUnit异常测试失败(意外)

JUnit exception test fails (unexpectedly)

我正在尝试运行JUnit测试来测试将抛出异常的方法。 但是,测试失败了,我不知道它失败的原因。 抛出异常的方法是:calcultor.setN();. 我做了两个版本的测试,即使它们应该通过,它们都会失败。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Rule
public ExpectedException exception = ExpectedException.none();    

@Test
public void testSetNZero() {
    exception.expect(IllegalArgumentException.class);
    exception.expectMessage("Het aantal CPU's is minder dan 1");
    Amdahl calculator = new Amdahl();
    calculator.setN(0);
    fail("Exception not thrown");
}

@Test (expected = IllegalArgumentException.class)
    public void testSetNZero() {
    Amdahl calculator = new Amdahl();
    calculator.setN(0);
}

Amdahl班:

1
2
3
4
5
6
7
8
9
public class Amdahl
{
    private int N;

    public void setN (int n) {
    if(n < 1) throw new IllegalArgumentException ("Het aantal CPU's is minder dan 1");
    this.N = n;
    }
}


testSetNZero失败,因为:

1
2
@Test (expected = IllegalArgumentException.class)
public void testSetNZero() {

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

相互矛盾并定义一个总是会失败的测试(它必须抛出异常而不是为了通过)。 使用ExpectedException@Test(expected = ...)


每当我预料到异常时,我就通过使用try-catch块解决了我的问题。 如果没有异常或错误的异常,则测试失败。

1
2
3
4
5
6
7
8
@Test
public void testSetNZero() {
    Amdahl calculator = new Amdahl();
    try{
        calculator.setN(0);
        fail();
    } catch(IllegalArgumentException e){}
}