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

5 篇文章 0 订阅

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

原理:

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

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

代码:

断言类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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 ;
         }
     }
 
}

 监听类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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;
     }
}

 

1
<br>

 测试类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 "比较两个数是否相等:" );    
     }
 
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值