为什么不调用处理 assertEquals 的 `catch(Exception ex)` 中的 `fail`?

Why `fail` inside `catch(Exception ex)` handling `assertEquals` is not called?

几分钟前我遇到了这个问题,但我想尝试其他方法..

例如我有这个方法:

//inside Number.java
public static int add(int nr1, int nr2) {
    return nr2 + nr2;
}

如你所见,我 return number2 + number2

在我的测试中,我使用它会抛出预期的错误 9 而不是在 main 方法中计算的数字。

@Test
public void test() throws Exception {
    int nr1 = 4;
    int nr2 = 5;
    int sum = Number.add(nr1, nr2);
    assertEquals(9, sum);
}

我现在尝试这样做,以便在程序失败时收到一条消息,但它并没有失败..

@Test
public void test() throws Exception {
    int nr1 = 4;
    int nr2 = 5;
    int sum = Number.add(nr1, nr2);
    
    try {
        assertEquals(9, sum);
    }catch(Exception e) {
        fail("Are you sure you calculate the right numbers?");
    }
}

但程序只向我显示 AssertionError 而不是 fail() 中的消息

我现在知道我可以这样使用它了:

assertEquals("...",9,sum);

但我不想要这个 AssertionError:

expected:<> but was <> 

最后

AssertionError 扩展了 Error 实现了 Throwable。你的

catch(Exception e)

没用,因为 AssertionError 不是 Exception

如果必须,可以直接使用 catch(AssertionError e) 捕获它,但通常 Error 不应该被捕获。

如果您真的想强制调用 fail,请避免使用 assertEquals,只需使用

if(sum != 9) {
  fail("Are you sure you calculate the right numbers?");
}

这完全避免了 AssertionError。