环球科技在此|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)【环球科技在此|Java自动化测试框架(TestNG)——异常测试】我们期望结果就是抛出该异常信息 , 但此时用例执行失败了 。 与我们想要的期望在抛出异常时 , 用例执行成功的结果不一致 , 此时我们可以在@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参数不一致时 , 用例将运行失败 。
- 科技一哥|荣耀30青春版图集赏析:触觉与视觉的完美享受
- 科技犬君|vs 索尼A9G 谁强?,上半年用户喜爱手机盘点;小米电视大师65英寸OLED
- 精选泛科技|结果如何?,一加8续航遭质疑:上半年最全机型横评出炉
- HAO懂科技|小米“神机”要来了?,小米正式“反击”!上下对折+骁龙865
- 阿拉图图科技说|而给华为仅仅是800万枚!,台积电为苹果准备8000万枚芯片
- 网罗说科技|三星note10一夜成“中端机”,还是256GB+3500mAh,三星扛不住了
- 科技数码迷|华为+荣耀别不报!入门级机型你们真没有Redmi良心
- 「小米科技」小米11Pro宣布新技术!首发骁龙875+屏下镜头,米粉:价格有点小贵
- 小熊科技|你会考虑吗?,三星顶级旗舰清仓!5G网络+45W快充+2k屏幕
- 简简科技|联想:国内同步上市,支持5G,界读丨摩托罗拉折叠手机Razr2曝光