Java自动化测试框架(TestNG)——异常测试
文章插图
在使用 TestNG 进行测试时 , 有些场景 , 我们通过向测试方法传入某些异常的参数 , 期望代码抛出异常时 , 我们可以通过 @Test( expectedExceptions, expectedExceptionsMessageRegExp)实现 , 并且可以实现异常信息的断言 。
运行时异常与检查异常Java中 对于异常分为运行时异常与检查异常 。
运行时异常 , 编译时不被检查的异常 , 不需要用throws 声明抛出 异常对象所属类 , 也可以不用throw 抛出异常对象或异常引用 。 对于调用该方法 , 也不需要放于 try-catch 代码块中 。 (避免程序代码错误被掩盖在运行中无法察觉)
检查异常 , 编译时被检测的异常 , 一旦用throw 抛出异常 , 如果当前方法可处理异常 , 那么需要在该方法内通过 try-catch 处理异常 。 如果当前方法不具备该异常的处理能力 , 那么必须在参数列表后方法体 前使用 throws 声明异常所属类 , 交给方法的调用方处理。
运行时异常测试(RuntimeException)首先先创建一个自定义运行时异常类 CustomRuntimeException , 如下
package testng.base.demo;?public class CustomRuntimeException extends RuntimeException {?//无参构造方法public CustomRuntimeException(){super();}?//含参的构造方法 , 指定异常的详细信息public CustomRuntimeException(String message){super(message);}?// 含参的构造方法 , 指定异常的详细信息和原因public CustomRuntimeException(String message, Throwable cause){super(message,cause);}?// 含参的构造方法 , 指定异常的原因public CustomRuntimeException(Throwable cause) {super(cause);}?}
创建一个测试类:runtimeExceptionTest.jav, 其代码如下所示 -
public class runtimeExceptionTest {@Testpublic void testExceptionDemo() {throw new CustomException("TestNG custom RuntimeException.");}?}?
执行该测试用例 , 将抛出如下异常信息
testng.base.demo.CustomException: TestNG custom RuntimeException.?at testng.base.demo.runtimeExceptionTest.testExceptionDemo(runtimeExceptionTest.java:7)at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:110)
我们期望结果就是抛出该异常信息 , 但此时用例执行失败了 。 与我们想要的期望在抛出异常时 , 用例执行成功的结果不一致 , 此时我们可以在 @Test注解中通过expectedExceptions参数实现 , 如下:
package testng.base.demo;import org.testng.annotations.Test;?public class runtimeExceptionTest {@Test(expectedExceptions = CustomRuntimeException.class)public void testExceptionDemo() {throw new CustomRuntimeException("TestNG custom RuntimeException.");}?}
此时 , 执行测试用例时 , 执行结果是成功的 , 如下
?===============================================Default SuiteTotal tests run: 1, Failures: 0, Skips: 0===============================================
我们还可以对抛出异常的信息进行判断 , 同样在@Test注解中通过expectedExceptionsMessageRegExp参数实现 , 如下:
package testng.base.demo;import org.testng.annotations.Test;?public class runtimeExceptionTest {@Test(expectedExceptions = CustomRuntimeException.class, expectedExceptionsMessageRegExp="TestNG custom RuntimeException.")public void testExceptionDemo() {throw new CustomRuntimeException("TestNG custom RuntimeException.");}}?
当抛出的异常信息与expectedExceptionsMessageRegExp参数不一致时 , 用例将运行失败 。
检查异常测试(Exception)首先先创建一个自定义检查异常类 CustomException, 如下
package testng.base.demo;?public class CustomException extends Exception {?//无参构造方法public CustomException(){super();}?//有参的构造方法public CustomException(String message){super(message);}?// 用指定的详细信息和原因构造一个新的异常public CustomException(String message, Throwable cause){super(message,cause);}?//用指定原因构造一个新的异常public CustomException(Throwable cause) {super(cause);}?}?
当进行检查类异常测试时 , 只需要在测试方法的参数列表后方法体 前用 throws 声明异常所属类 , 代码如下
【Java自动化测试框架(TestNG)——异常测试】package testng.base.demo;import org.testng.annotations.Test;?public class exceptionTest {?@Test(expectedExceptions = CustomException.class, expectedExceptionsMessageRegExp="TestNG custom Exception.")public void testExceptionDemo() throws CustomException {throw new CustomException("TestNG custom Exception.");}?}?
- 现状|程序员现状揭秘:平均年薪20.36万,Java人才需求量最大
- iPhone|折叠屏iPhone要来?曝苹果开始测试|OPPO Reno5真机曝光
- 承受|折叠屏iPhone已开始测试?要求能承受10万次折叠,或在2年后发布
- 操作|[LIVE On]黄敏贤和郑多彬充满心碎的下午:机器操作每次都不能通过测试
- 测试阶段|折叠 iPhone 终于要来了,已经进入测试阶段~
- NIST测试显示人脸识别系统对蒙面人的识别能力越来越强
- Twitter|Twitter的Audio Spaces测试包括转录、扬声器控制和报告功能
- OLED驱动芯片|华为三喜临门,OLED芯片自研成功,鸿蒙OS本月测试
- 芯片|中国移动联合芯讯通发布《5G终端、芯片及测试产业报告》
- 检测|机器视觉检测解决方案商“鼎纳自动化”完成B轮亿元融资