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 中实现的测试非常相似.为了更好 ...
随机推荐
- Ubuntu安装java的最简单的命令行方式
由于经常要安装java,因此 深受其烦! 分为两部: 1. sudo apt-get install openjdk-7-jdk 2. sudo vim /etc/environment 然后把下面的 ...
- asp.net 下的中文分词检索工具 - jieba.net
jieba是python下的一个检索库, 有人将这个库移植到了asp.net 平台下, 完全可以替代lucene.net以及盘古分词的搭配 之所以写这个, 其实是因为昨天面试时, 被问到网站的关键字检 ...
- iOS解决UITableView中Cell重用带来的问题
tableView的常规配置,当超出一屏的cell就会标上可重用的标识出列到可重用缓存池中,后面再根据可重用标识来到的可重的cell就会和前面显示同样内容. - (UITableViewCell *) ...
- Jquery的过滤选择器分为哪几种?
Jquery的过滤选择器分为哪几种? 转载▼ 标签: jquery 过滤选择器 分类 分类: JQuery 所有的过滤选择器分为哪几种: 一.基本过滤选择器(重点掌握下列八个) :first 选取第一 ...
- iOS 博客资源精选
摘要:记录一些网上非常牛的人写的博文.收藏起来. 以备日后需要时学习备用. 1:iOS中UIWebView的Javascript与Objective-C通信 http://imchao.net/201 ...
- JMS(Java平台上的专业技术规范)
JMS(Java平台上的专业技术规范) 编辑 jms即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应 ...
- Java编程语言下Selenium 对于下拉框,单选,多选等选择器的操作
WebElement selector = driver.findElement(By.id("Selector")); Select select = new Select(se ...
- 解决ubuntu unity下gvim菜单消失的问题
#问题描述:在终端下用gvim 指令打开 gvim就不显示菜单.在不启用unity的桌面环境下用终端打开gvim是有菜单的.从程序菜单中打开gvim是显示菜单的.用sudo打开gvim也可以显示菜单, ...
- Django若干新版本一些新特性
前面那篇文章简单总结了1.9版本的新特性,其实这是我一直想做的一件事情,不过因为对于工作不是那么紧急需要,所以一直被搁浅着,今天既然做了就多做一点吧 Django1.8的新特性大概(2015年4月发布 ...
- Bootstrap免费模板站推荐
第一个:http://startbootstrap.com/ 第二个:http://www.bootstrapzero.com/ 第三个:https://bootswatch.com/ 第四个:htt ...