为什么 TestNG 允许多个预期异常?


TestNG 在单个 @Test 方法中支持多个异常。这类似于 Java 中的 catch 异常,用户可以指定可能抛出的多个异常类。

例如:catch 异常中的语法是

catch(IOException | InterruptedException ex) {

类似地,TestNG 中的语法是

@Test(expectedExceptions={NullPointerException.class,IllegalArgumentException.class })
public void throwsNullPointer() {
    throw new NullPointerException();
}

需要注意的是,在这种情况下,TestNG 期望从列表中抛出其中一个异常。如果异常与列表不同,或者没有异常,则方法将失败。如果抛出的是列表中提到的异常,则方法将通过。

如果未抛出预期异常,则错误示例如下所示:

方法 throwsNullPointer()[pri:0, instance:OrderofTestExecutionInTestNG@3567135c] 应该抛出 [class java.lang.NullPointerException, class java.lang.IllegalArgumentException] 中任何类型的异常。

在这篇文章中,我们将说明在一个测试方法中支持多个异常的可能原因。

  • 第一个原因是提供与 Java 中 catch 语句类似的功能。它允许用户在方法级别处理异常,并可以避免在实际代码中使用 try catch 块。

  • 有时,代码很复杂,并且可能在独特的场景中抛出异常。为了处理这种情况,最好具备此功能。

  • 一个通用的原因可能是测试某个功能的多个实现,这些实现根据提供的输入抛出异常的方式可能不同。这些实现可能是不同的类,也可能是同一个类的不同版本。

  • 在测试依赖于第三方软件的代码时,这非常有用,并且必须使用该软件的多个版本进行测试。应使用不同的数据在整个软件中测试不同的行为。

  • 在对 API 或功能进行“黑盒”测试时也很有用,在这种情况下,接口规范不明确。

  • 在执行代码效率(例如涵盖异常处理的单元测试)时,它非常方便。

更新于:2023年8月21日

227 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.