Java自动化测试框架(TestNG)——异常测试

文章图片
在使用TestNG进行测试时 , 有些场景 , 我们通过向测试方法传入某些异常的参数 , 期望代码抛出异常时 , 我们可以通过@Test(expectedExceptions,expectedExceptionsMessageRegExp)实现 , 并且可以实现异常信息的断言 。
运行时异常与检查异常
Java中对于异常分为运行时异常与检查异常 。
运行时异常 , 编译时不被检查的异常 , 不需要用throws声明抛出异常对象所属类 , 也可以不用throw抛出异常对象或异常引用 。 对于调用该方法 , 也不需要放于try-catch代码块中 。 (避免程序代码错误被掩盖在运行中无法察觉)
检查异常 , 编译时被检测的异常 , 一旦用throw抛出异常 , 如果当前方法可处理异常 , 那么需要在该方法内通过try-catch处理异常 。 如果当前方法不具备该异常的处理能力 , 那么必须在参数列表后方法体前使用throws声明异常所属类 , 交给方法的调用方处理 。
运行时异常测试(RuntimeException)
首先先创建一个自定义运行时异常类CustomRuntimeException , 如下
packagetestng.base.demo;?publicclassCustomRuntimeExceptionextendsRuntimeException{?//无参构造方法publicCustomRuntimeException(){super();}?//含参的构造方法 , 指定异常的详细信息publicCustomRuntimeException(Stringmessage){super(message);}?//含参的构造方法 , 指定异常的详细信息和原因publicCustomRuntimeException(Stringmessage,Throwablecause){super(message,cause);}?//含参的构造方法 , 指定异常的原因publicCustomRuntimeException(Throwablecause){super(cause);}?}创建一个测试类:runtimeExceptionTest.jav , 其代码如下所示-
publicclassruntimeExceptionTest{@TestpublicvoidtestExceptionDemo(){thrownewCustomException(''TestNGcustomRuntimeException.'');}?}?执行该测试用例 , 将抛出如下异常信息
testng.base.demo.CustomException:TestNGcustomRuntimeException.?attestng.base.demo.runtimeExceptionTest.testExceptionDemo(runtimeExceptionTest.java:7)atorg.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)atorg.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)atcom.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)atcom.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:110)我们期望结果就是抛出该异常信息 , 但此时用例执行失败了 。 与我们想要的期望在抛出异常时 , 用例执行成功的结果不一致 , 此时我们可以在@Test注解中通过expectedExceptions参数实现 , 如下:
packagetestng.base.demo;importorg.testng.annotations.Test;?publicclassruntimeExceptionTest{@Test(expectedExceptions=CustomRuntimeException.class)publicvoidtestExceptionDemo(){thrownewCustomRuntimeException(''TestNGcustomRuntimeException.'');}?}此时 , 执行测试用例时 , 执行结果是成功的 , 如下
?===============================================DefaultSuiteTotaltestsrun:1,Failures:0,Skips:0===============================================我们还可以对抛出异常的信息进行判断 , 同样在@Test注解中通过expectedExceptionsMessageRegExp参数实现 , 如下:
packagetestng.base.demo;importorg.testng.annotations.Test;?publicclassruntimeExceptionTest{@Test(expectedExceptions=CustomRuntimeException.class,expectedExceptionsMessageRegExp=''TestNGcustomRuntimeException.'')publicvoidtestExceptionDemo(){thrownewCustomRuntimeException(''TestNGcustomRuntimeException.'');}}?当抛出的异常信息与expectedExceptionsMessageRegExp参数不一致时 , 用例将运行失败 。
检查异常测试(Exception)
首先先创建一个自定义检查异常类CustomException , 如下
packagetestng.base.demo;?publicclassCustomExceptionextendsException{?//无参构造方法publicCustomException(){super();}?//有参的构造方法publicCustomException(Stringmessage){super(message);}?//用指定的详细信息和原因构造一个新的异常publicCustomException(Stringmessage,Throwablecause){super(message,cause);}?//用指定原因构造一个新的异常publicCustomException(Throwablecause){super(cause);}?}?【Java自动化测试框架(TestNG)——异常测试】当进行检查类异常测试时 , 只需要在测试方法的参数列表后方法体前用throws声明异常所属类 , 代码如下
packagetestng.base.demo;importorg.testng.annotations.Test;?publicclassexceptionTest{?@Test(expectedExceptions=CustomException.class,expectedExceptionsMessageRegExp=''TestNGcustomException.'')publicvoidtestExceptionDemo()throwsCustomException{thrownewCustomException(''TestNGcustomException.'');}?}?
推荐阅读
- 数字人民币试点地区展开测试 集中在餐饮、零售、充值等小范围场景
- 科学探索|从SN5到SN9 SpaceX星际飞船原型要做这些测试
- 科学|从SN5到SN9,SpaceX星际飞船原型要做这些测试!
- Java|软件开发平台之争:NET VS Java,谁是更好的选择?
- 心理测试:第一直觉,你喜欢哪一只锦鲤?测你一生有多大福气!准
- 心理测试:哪个蒙面人是男性?一秒测出你天生靠什么吃饭,超准!
- 火星科技站点|黑鲨3S新功能测试:用一根数据线,能让电脑玩上安卓游戏
- Java|办公小技巧:超凡业绩 从完美的KPI仪表板开始
- 洛雨慕卉|心理测试;4条阶梯,你最不想走哪条?测你哪方面能力较强
- 心理测试;4条阶梯,你最不想走哪条?测你哪方面能力较强
