为什么 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 或功能进行“黑盒”测试时也很有用,在这种情况下,接口规范不明确。
在执行代码效率(例如涵盖异常处理的单元测试)时,它非常方便。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP