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

上一篇 / 下一篇  2015-08-12 16:37:18 / 个人分类:TestNG

原理:

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

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

代码:

断言类:

 
packagecom.demo;
 
importjava.util.ArrayList;
importjava.util.List;
 
importorg.testng.Assert;
 
publicclassAssertion {
     
    publicstaticbooleanflag =true;
     
    publicstaticList<Error> errors =newArrayList<Error>();
     
    publicstaticvoidverifyEquals(Object actual, Object expected){
        try{
            Assert.assertEquals(actual, expected);
        }catch(Error e){
            errors.add(e);
            flag =false;
        }
    }
     
    publicstaticvoidverifyEquals(Object actual, Object expected, String message){
        try{
            Assert.assertEquals(actual, expected, message);
        }catch(Error e){
            errors.add(e);
            flag =false;
        }
    }
 
}
 
监听类:
packagecom.demo;
 
importjava.util.ArrayList;
importjava.util.List;
 
importorg.testng.ITestResult;
importorg.testng.TestListenerAdapter;
 
publicclassAssertionListenerextendsTestListenerAdapter {
 
    @Override
    publicvoidonTestStart(ITestResult result) {
        Assertion.flag =true;       
        Assertion.errors.clear();
    }
     
    @Override
    publicvoidonTestFailure(ITestResult tr) {
        this.handleAssertion(tr);
    }
     
    @Override
    publicvoidonTestSkipped(ITestResult tr) {
        this.handleAssertion(tr);
    }
     
    @Override
    publicvoidonTestSuccess(ITestResult tr) {
        this.handleAssertion(tr);
    }
     
    privateintindex =0;
     
    privatevoidhandleAssertion(ITestResult tr){
        if(!Assertion.flag){
            Throwable throwable = tr.getThrowable();           
            if(throwable==null){
                throwable =newThrowable();
            }           
            StackTraceElement[] traces = throwable.getStackTrace();
            StackTraceElement[] alltrace =newStackTraceElement[0];           
            for(Error e : Assertion.errors) {
                StackTraceElement[] errorTraces = e.getStackTrace();
                StackTraceElement[] et =this.getKeyStackTrace(tr, errorTraces);
                StackTraceElement[] message =newStackTraceElement[]{newStackTraceElement("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);           
        }
    }
     
    privateStackTraceElement[] getKeyStackTrace(ITestResult tr, StackTraceElement[] stackTraceElements){
        List<StackTraceElement> ets =newArrayList<StackTraceElement>();
        for(StackTraceElement stackTraceElement : stackTraceElements) {           
            if(stackTraceElement.getClassName().equals(tr.getTestClass().getName())){               
                ets.add(stackTraceElement);
                index = stackTraceElement.getLineNumber();
            }
        }
        StackTraceElement[] et =newStackTraceElement[ets.size()];
        for(inti =0; i < et.length; i++) {
            et[i] = ets.get(i);
        }
        returnet;
    }
     
    privateStackTraceElement[] merge(StackTraceElement[] traces1, StackTraceElement[] traces2){
        StackTraceElement[] ste =newStackTraceElement[traces1.length+traces2.length];
        for(inti =0; i < traces1.length; i++) {
            ste[i] = traces1[i];
        }
        for(inti =0; i < traces2.length; i++) {
            ste[traces1.length+i] = traces2[i];
        }
        returnste;
    }
}
 
测试类:
 
packagecom.demo;
 
importorg.testng.annotations.Listeners;
importorg.testng.annotations.Test;
 
@Listeners({com.demo.AssertionListener.class})
publicclassTest14 {
 
     
    @Test
    publicvoidtestAssert3(){ 
        Assertion.verifyEquals(2,3,"比较两个数是否相等:");
        Assertion.verifyEquals(1,2,"比较两个数是否相等:");    
    }
     
    @Test
    publicvoidtestAssert4(){ 
        Assertion.verifyEquals(4,3,"比较两个数是否相等:");
        Assertion.verifyEquals(2,2,"比较两个数是否相等:");    
    }
 
}
 

TAG: 运行 TestNG testng 断言失败 继续

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-16  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 4067
  • 日志数: 2
  • 建立时间: 2014-03-26
  • 更新时间: 2015-08-12

RSS订阅

Open Toolbar