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或功能进行“黑盒”测试时,这个功能也很有用。
-
在执行效率优化代码时非常方便,例如覆盖异常处理的单元测试。