断言错误,即使在 JUnit 中存在预期错误

Assertion error even if there is expected error in JUnit

我的应用中的测试抛出:

java.lang.AssertionError: Expected exception: java.lang.RuntimeException
    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:35)

即使我有这个:

@Test(expected=RuntimeException.class)
public void test(){
  // I can see from the console log that a java.lang.RuntimeException was thrown
}

可能是什么问题?

JUnit 检测异常被抛出的唯一方法是 @Test 方法抛出它,即。终止它的执行。

如果您正在捕获异常并进行处理,则方法执行不会因为抛出的异常而停止。它会正常完成。由于抛出的异常,您需要它突然完成。如果你需要记录它,请重新抛出它。

通过使用

注释您的测试
@Test(expected=RuntimeException.class)

您断言当测试 运行 时,将抛出 RuntimeExcetption 而 未捕获 。事实上,您在评论中指出“在调用的代码中有一个 try-catch 语句”,这意味着异常已被捕获。

因此 JUnit 将其标记为失败测试是正确的。您断言抛出了一个异常,但实际上并没有。