TestNG exception
以下内容引自: https://howtodoinjava.com/testng/testng-expected-exception-and-expected-message-tutorial/
TestNG – Expected Exception and Expected Message Tutorial
November 20, 2014 by Lokesh Gupta
While writing unit tests there can be certain scenarios where we need to verify that an exception is being thrown by the program during execution. TestNG provides a feature to test such scenarios by allowing the user to specify the type of exceptions that are expected to be thrown by a test methodduring execution. It supports multiple values being provided for verification. If the exception thrown by the test is not part of the user entered list, the test method will be marked as failed.
Let’s create a sample test and learn how exception test works in TestNG.
@Test ( expectedExceptions = { IOException.class, NullPointerException.class } )
Let’s see an example to understand it better.
Example of Expected Exception Test
In below test, we have two test methods i.e. exceptionTestOne()
and exceptionTestTwo()
. Here exceptionTestOne()
throws IOException
where as exceptionTestTwo()
throws Exception
. The expected exception to validate while running these tests is mentioned using the expectedExceptions attribute value while using the Test annotation.
public class ExceptionTestDemo { @Test (expectedExceptions = { IOException. class }) public void exceptionTestOne() throws Exception { throw new IOException(); } @Test (expectedExceptions = { IOException. class , NullPointerException. class }) public void exceptionTestTwo() throws Exception { throw new Exception(); } } |
Output of above test run is given below:
[TestNG] Running: C:\Users\somepath\testng-customsuite.xml PASSED: exceptionTestOne FAILED: exceptionTestTwo org.testng.TestException: Expected exception java.io.IOException but got org.testng.TestException: Expected exception java.io.IOException but got java.lang.Exception at org.testng.internal.Invoker.handleInvocationResults(Invoker.java: 1497 ) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java: 1245 ) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java: 127 ) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java: 111 ) at org.testng.TestRunner.privateRun(TestRunner.java: 767 ) at org.testng.TestRunner.run(TestRunner.java: 617 ) at org.testng.SuiteRunner.runTest(SuiteRunner.java: 334 ) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java: 329 ) at org.testng.SuiteRunner.privateRun(SuiteRunner.java: 291 ) at org.testng.SuiteRunner.run(SuiteRunner.java: 240 ) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java: 52 ) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java: 86 ) at org.testng.TestNG.runSuitesSequentially(TestNG.java: 1224 ) at org.testng.TestNG.runSuitesLocally(TestNG.java: 1149 ) at org.testng.TestNG.run(TestNG.java: 1057 ) at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java: 111 ) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java: 204 ) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java: 175 ) Caused by: org.testng.TestException: Expected exception java.io.IOException but got java.lang.Exception at org.testng.internal.Invoker.handleInvocationResults(Invoker.java: 1497 ) at org.testng.internal.Invoker.invokeMethod(Invoker.java: 754 ) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java: 901 ) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java: 1231 ) ... 16 more Caused by: java.lang.Exception at com.howtodoinjava.test.ExceptionTestDemo.exceptionTestTwo(ExceptionTestDemo.java: 16 ) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25 ) at java.lang.reflect.Method.invoke(Method.java: 597 ) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java: 84 ) at org.testng.internal.Invoker.invokeMethod(Invoker.java: 714 ) ... 18 more =============================================== Default test Tests run: 2 , Failures: 1 , Skips: 0 =============================================== |
As you can see from the test results, exceptionTestTwo()
was marked as failed by TestNG during execution. The test failed because the exception thrown by the said method does not match the exception list provided in the expectedExceptions list.
Example of Expected Exception Test with Verifying Message
You can also verify a test based on the exception message that was thrown by the test. Regular expression can also be used to verify the error message, this can be done using .*.
Depending upon the position of the regular expression we can use it to do pattern matching such as starts-with, contains, and ends-with while verifying the exception message.
Let’s learn how to write a exception test based on the exception message thrown.
public class ExceptionTestDemo { @Test (expectedExceptions = { IOException. class }, expectedExceptionsMessageRegExp = "Pass Message test" ) public void exceptionTestOne() throws Exception { throw new IOException( "Pass Message test" ); } @Test (expectedExceptions = { IOException. class }, expectedExceptionsMessageRegExp = ".* Message .*" ) public void exceptionTestTwo() throws Exception { throw new IOException( "Pass Message test" ); } @Test (expectedExceptions = { IOException. class }, expectedExceptionsMessageRegExp = "Pass Message test" ) public void exceptionTestThree() throws Exception { throw new IOException( "Fail Message test" ); } } |
Output of above test run is given below:
[TestNG] Running: C:\Users\somepath\testng-customsuite.xml PASSED: exceptionTestOne PASSED: exceptionTestTwo FAILED: exceptionTestThree org.testng.TestException: Expected exception java.io.IOException but got org.testng.TestException: The exception was thrown with the wrong message: expected "Pass Message test" but got "Fail Message test" at org.testng.internal.Invoker.handleInvocationResults(Invoker.java: 1497 ) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java: 1245 ) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java: 127 ) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java: 111 ) at org.testng.TestRunner.privateRun(TestRunner.java: 767 ) at org.testng.TestRunner.run(TestRunner.java: 617 ) at org.testng.SuiteRunner.runTest(SuiteRunner.java: 334 ) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java: 329 ) at org.testng.SuiteRunner.privateRun(SuiteRunner.java: 291 ) at org.testng.SuiteRunner.run(SuiteRunner.java: 240 ) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java: 52 ) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java: 86 ) at org.testng.TestNG.runSuitesSequentially(TestNG.java: 1224 ) at org.testng.TestNG.runSuitesLocally(TestNG.java: 1149 ) at org.testng.TestNG.run(TestNG.java: 1057 ) at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java: 111 ) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java: 204 ) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java: 175 ) Caused by: org.testng.TestException: The exception was thrown with the wrong message: expected "Pass Message test" but got "Fail Message test" at org.testng.internal.Invoker.handleInvocationResults(Invoker.java: 1481 ) at org.testng.internal.Invoker.invokeMethod(Invoker.java: 754 ) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java: 901 ) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java: 1231 ) ... 16 more Caused by: java.io.IOException: Fail Message test at com.howtodoinjava.test.ExceptionTestDemo.exceptionTestThree(ExceptionTestDemo.java: 21 ) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25 ) at java.lang.reflect.Method.invoke(Method.java: 597 ) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java: 84 ) at org.testng.internal.Invoker.invokeMethod(Invoker.java: 714 ) ... 18 more =============================================== Default test Tests run: 3 , Failures: 1 , Skips: 0 =============================================== |
In above test methods exceptionTestThree()
failed because expected message didn’t matched.
TestNG exception的更多相关文章
- selenium+testNG+Ant
好几天没写了,抽时间写下,也好有个总结: 1.selenium+testNG+Ant (1)ant 是构建工具 他的作用就是运行你配置好的东西 而tentng.xml你可以认为他是管理test的一个配 ...
- Java Unit Testing - JUnit & TestNG
转自https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaUnitTesting.html yet another insignifican ...
- Exception in thread "main" java.lang.NoSuchMethodError: org.testng.TestNG.configure(Lorg/testng/CommandLineArgs;)V
TestNG运行时报以下错误: Exception in thread "main" java.lang.NoSuchMethodError: org.testng.TestNG. ...
- testng 失败自动截图
testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法 那么首先新建一个Listene ...
- TestNG 与 Junit的比较
转自 http://www.blogjava.net/fanscial/archive/2005/12/14/23780.html 1. JDK 5 Annotations (JDK ...
- APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例
前言 前两篇普及相关基础知识后,本篇主要对举例对国家气象局接口自动化测试进行讲解(Get请求及结果断言),以达到自动化测试入门目的,除了前两篇的一些了解外,需要有一定的JAVA知识(HTTP相 ...
- TestNG BeforeClass BeforeMethod Test AfterClass AfterMethod
http://topmanopensource.iteye.com/blog/1983729 1.TestNG测试注解和Junit注解的不同以及生命周期: TestNG测试的一个方法的生命周期: @B ...
- 基于WebDriver&TestNG 实现自己的Annotation @TakeScreenshotOnFailure
相信用过Selenium WebDriver 的朋友都应该知道如何使用WebDriver API实现Take Screenshot的功能. 在这篇文章里,我主要来介绍对failed tests实现 t ...
- testNg vs junit 4.X @Test
http://www.ibm.com/developerworks/cn/java/j-cq08296/ 一个简单的测试用例 初看起来,JUnit 4 和 TestNG 中实现的测试非常相似.为了更好 ...
随机推荐
- CentOS6.4下安装Nginx1.12.2
1.安装GCC安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装 yum install gcc-c++ 2.安装PCRE-devel PCR ...
- ASP.NET Core 2.0 : 九.从Windows发布到CentOS的跨平台部署
本文聊一下如何在Windows上用VS开发并发布, 然后将其部署到CentOS上.对于我们一些常在Windows上逛的来说,CentOS用起来还真有些麻烦.MSDN官方有篇文章大概讲了一下(链接),按 ...
- View requires API level 14 (current min is 8): <GridLayout>
在学习android的过程中,出现这个错误的是否,可以build clean解决
- IE条件注释,为IE单独写js
<!--[if IE ]> <body class="ie"> <![endif]--> <!--[if !IE]>--> & ...
- python 面向对象终极进阶之开发流程
好了,你现在会了面向对象的各种语法了, 但是你会发现很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?原因就是因为你还没掌握一门面向对象设计利器, 此刻有经验的人可能会想到 ...
- quick-cocos2d-x与 cocos2d-x的关系
quick-cocos2d-x(后文简称 quick)与 cocos2d-x 的关系,用一句话概括:quick 是 cocos2d-x 针对 Lua 的豪华套装威力加强版. 那 quick 与 coc ...
- PHP后端之验证码
PHP后端之验证码 前言: 打算写一些实际开发中遇到的东西.我这个人记性不好,觉得记下来,以后就算想找,也能找得到. PHP,可能很长一段时间都不会使用了.所以还是留一些记录. 另外还有一些服务器架设 ...
- Java NIO SocketChannel套接字通道
原文链接:http://tutorials.jenkov.com/java-nio/socketchannel.html 在Java NIO体系中,SocketChannel是用于TCP网络连接的套接 ...
- 【转】浏览器输入URL后发生了什么
转自:http://www.cnblogs.com/webdeve/p/7865520.html本文摘要: 输入网址 当我们在浏览器输入网址并回车后,一切从这里开始. 一.DNS域名解析 我们在浏览器 ...
- idea运行多模块的maven项目,工作目录不一致的问题
我使用idea开发多模块的maven项目,目录结构如下: segment (父级) ---pom.xml ---core (子模块) ...