TestNG:如何测试强制性异常?

2022-09-01 08:39:33

我想写一个TestNG测试,以确保在特定条件下引发异常,如果未引发异常,则测试失败。有没有一种简单的方法可以做到这一点,而不必创建一个额外的布尔变量?

关于这个主题的相关博客文章:http://konigsberg.blogspot.com/2007/11/testng-and-expectedexceptions-ive.html


答案 1

@Test(expectedExceptions)对于最常见的情况很有用:

  • 您希望引发特定异常
  • 您需要该异常的消息包含特定字词

根据文档,如果抛出 no,测试将失败:expectedException

测试方法应引发的异常列表。如果未引发异常或与此列表中的异常不同,则此测试将被标记为失败。

以下是一些不够用的情况:@Test(expectedExceptions)

  • 您的测试方法有多个语句,并且预计只有一个语句会抛出
  • 您正在抛出自己的异常类型,您需要确保它符合某个标准

在这种情况下,您应该恢复到传统的(测试前)模式:

try {
  // your statement expected to throw
  fail();
}
catch(<the expected exception>) {
  // pass
}

答案 2

使用批注检查预期的异常。@Test

@Test(
    expectedExceptions = AnyClassThatExtendsException.class,
    expectedExceptionsMessageRegExp = "Exception message regexp"
)

或者,如果您不想检查异常消息,只需下面就足够了

@Test(expectedExceptions = AnyClassThatExtendsException.class)

这样,您就不需要使用丑陋的 try catch 块,只需在测试中调用异常抛出器方法即可。


推荐