JAVA结合testng断言verify(断言失败不中断继续执行)

原理:

1.自已构造一个断言类,把Assert.assertEquals给try catch住。

2.利用testng的监听类在测试方法运行结束后进行分析。

代码:

断言类:

package com.demo;

import java.util.ArrayList;
import java.util.List;

import org.testng.Assert;

public class Assertion {

	public static boolean flag = true;

	public static List<Error> errors = new ArrayList<Error>();

	public static void verifyEquals(Object actual, Object expected){
		try{
			Assert.assertEquals(actual, expected);
		}catch(Error e){
			errors.add(e);
			flag = false;
		}
	}

	public static void verifyEquals(Object actual, Object expected, String message){
		try{
			Assert.assertEquals(actual, expected, message);
		}catch(Error e){
			errors.add(e);
			flag = false;
		}
	}

}

监听类:

package com.demo;

import java.util.ArrayList;import java.util.List;

import org.testng.ITestResult;import org.testng.TestListenerAdapter;

public class AssertionListener extends TestListenerAdapter {

    @Override    public void onTestStart(ITestResult result) {        Assertion.flag = true;                Assertion.errors.clear();    }        @Override    public void onTestFailure(ITestResult tr) {        this.handleAssertion(tr);    }        @Override    public void onTestSkipped(ITestResult tr) {        this.handleAssertion(tr);    }        @Override    public void onTestSuccess(ITestResult tr) {        this.handleAssertion(tr);    }        private int index = 0;        private void handleAssertion(ITestResult tr){        if(!Assertion.flag){            Throwable throwable = tr.getThrowable();                        if(throwable==null){                throwable = new Throwable();            }                        StackTraceElement[] traces = throwable.getStackTrace();            StackTraceElement[] alltrace = new StackTraceElement[0];                        for (Error e : Assertion.errors) {                StackTraceElement[] errorTraces = e.getStackTrace();                StackTraceElement[] et = this.getKeyStackTrace(tr, errorTraces);                StackTraceElement[] message = new StackTraceElement[]{new StackTraceElement("message : "+e.getMessage()+" in method : ", tr.getMethod().getMethodName(), tr.getTestClass().getRealClass().getSimpleName(), index)};                index = 0;                alltrace = this.merge(alltrace, message);                alltrace = this.merge(alltrace, et);            }            if(traces!=null){                traces = this.getKeyStackTrace(tr, traces);                alltrace = this.merge(alltrace, traces);            }                        throwable.setStackTrace(alltrace);            tr.setThrowable(throwable);            Assertion.flag = true;                Assertion.errors.clear();            tr.setStatus(ITestResult.FAILURE);                    }    }        private StackTraceElement[] getKeyStackTrace(ITestResult tr, StackTraceElement[] stackTraceElements){        List<StackTraceElement> ets = new ArrayList<StackTraceElement>();        for (StackTraceElement stackTraceElement : stackTraceElements) {                        if(stackTraceElement.getClassName().equals(tr.getTestClass().getName())){                                ets.add(stackTraceElement);                index = stackTraceElement.getLineNumber();            }        }        StackTraceElement[] et = new StackTraceElement[ets.size()];        for (int i = 0; i < et.length; i++) {            et[i] = ets.get(i);        }        return et;    }        private StackTraceElement[] merge(StackTraceElement[] traces1, StackTraceElement[] traces2){        StackTraceElement[] ste = new StackTraceElement[traces1.length+traces2.length];        for (int i = 0; i < traces1.length; i++) {            ste[i] = traces1[i];        }        for (int i = 0; i < traces2.length; i++) {            ste[traces1.length+i] = traces2[i];        }        return ste;    }}

测试类:

package com.demo;

import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

@Listeners({com.demo.AssertionListener.class})
public class Test14 {

	@Test
	public void testAssert3(){
		Assertion.verifyEquals(2, 3, "比较两个数是否相等:");
		Assertion.verifyEquals(1, 2, "比较两个数是否相等:");
	}

	@Test
	public void testAssert4(){
		Assertion.verifyEquals(4, 3, "比较两个数是否相等:");
		Assertion.verifyEquals(2, 2, "比较两个数是否相等:");
	}

}
时间: 2024-10-12 05:27:58

JAVA结合testng断言verify(断言失败不中断继续执行)的相关文章

Java基础语法&lt;十一&gt; 异常 断言 日志 调试

1 处理错误 1.1 异常分类 Error类层次描述了Java运行时系统的内部错误和资源耗尽错误. 设计Java程序时,主要关注Exception层次结构. 由程序错误导致的异常属于RuntimeException ,而程序本身没有问题,但由于像I/O错误这类问题导致的异常属于其他异常. RuntimeException包含下面几种情况: 错误的类型转换 ClassCastException 数组访问越界 ArrayIndexOutOfBoundsException 访问空指针 NullPoin

微信企业号回调模式配置讲解 Java Servlet+Struts2版本 echostr校验失败解决

微信企业号回调模式配置讲解 Java Servlet+Struts2版本 echostr校验失败解决 echostr校验失败,请您检查是否正确解密并输出明文echostr 异常java.security.InvalidKeyException:illegal Key Size 也就是echostr校验失败,请您检查是否正确解密并输出明文echostr这个错误 企业微信登陆地址http://qy.weixin.qq.com/ 配置成功以后 Servlet public void doGet(Htt

Mac系统搭建java+selenium+testng环境

Mac系统搭建java+selenium+testng环境: 1.   配置java环境,安装eclipse 2.  离线安装testng插件 3.  配置maven环境 4.  安装谷歌浏览器,下载对应浏览器版本的chromedriver 陆陆续续遇到的一些小问题记录: 1.  testng是使用离线方式安装的,离线包下载地址:http://dl.bintray.com/testng-team/testng-eclipse-release/ 下载完成后将其放到eclipse的dropins文件

Java并发编程 - 逐级深入 看线程的中断

最近有足够的空闲时间 去东看看西看看,突然留意到在Java的并发编程中,有关线程中断的,以前初学时一直没弄清楚的一些小东西. 于是,刚好把收获简单的总结一下,通过此文来总结记录下来. 从源码看线程的状态 在开始分析线程的中断工作之前,我们肯定要先留意一个点,那就是肯定是有开启,才会有与之对应的中断工作出现. 开启一个线程的工作,相信每个Javaer都烂熟于心.它很简单,new一个thread对象,然后调用start方法开启线程. 那么,一个好玩的问题就出现了:既然开启一个线程的步骤如此简单明了,

不会导致整个事务失败,事务继续执行下去。

用的转换函数是 cast 和 convert,用于把表达式得出的值的类型转换成另一个数据类型,如果转换失败,该函数抛出错误,导致整个事务回滚.在SQL Server 2012版本中,新增两个容错的转换函数:try_cast 和 try_convert,如果转换操作失败,该函数返回null,不会导致整个事务失败,事务继续执行下去. 注意:对于SQL Server显式定义的不合法转换,try_cast 和 try_convert 会失败,抛出错误信息:Explicit conversion from

【转】Java finally语句到底是在return之前还是之后执行?

网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过试验,至少有两种情况下finally语句时不会被执行的: (1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到. (2)在try块中有System.exit(0);这样的语句,System.exit(0);是

Java 的参数检查与断言 - Guava Preconditions

在前一篇 Scala 的参数检查与断言: require, assert, assume 和 ensuring,捉摸 Scala 的断言时提到了 JDK 内置对断言的粗略支持,也就是 assert 语句,并且默认该特性是被关掉,需 -ea 开启. assert object != null;assert object != null : "object can't be null"; 还进一步接触了 Scala 的 Predef 方法 require, assert, assume,

java+Selenium+TestNg搭建自动化测试架构(2)实现跨浏览器功能

1.切换浏览器类:其中包含了切换浏览器的方法,以及关闭浏览器,设置等待时间,以及重写的断言方法 package com.rrx.framework; import java.io.IOException;import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium

Java + Selenium + TestNG + Maven 框架实现Web Automation

环境准备: 1. Java: Install Java jdk: Version: java 1.8 or aboveConfigure Java Environment Variables:Add JAVA_HOMEAdd CLASSPATHAdd to Path Verify Java was configured: Input javac in CMD can get output successfully. 2. Eclipse https://www.eclipse.org/ Unzi