接口测试Java--AssertListener监听类

本文介绍了如何扩展AssertListener类,重写关键方法来捕获并管理单元测试中的断言失败。通过Assertion类,实现了错误收集和测试结果定制。同时,展示了如何在测试配置文件中添加自定义AssertListener监听器。
摘要由CSDN通过智能技术生成

重写AssertListener类中的相关方法

public class AssertListener extends TestListenerAdapter {
    private int index = 0;
    @Override
    public void onTestStart(ITestResult iTestResult) {
        super.onTestStart(iTestResult);
        Assertion.flag = true;
        Assertion.errors.clear();
    }
    @Override
    public void onTestSkipped(ITestResult iTestResult) {
        this.handleAssertion(iTestResult);
    }
    @Override
    public void onTestSuccess(ITestResult iTestResult) {
        this.handleAssertion(iTestResult);
    }
    @Override
    public void onTestFailure(ITestResult iTestResult) {
        this.handleAssertion(iTestResult);
    }
    private void handleAssertion(ITestResult tr){
        if(!Assertion.flag){
            ThreadEntry entry = new ThreadEntry();
            AndroidDriver driver = entry.getDriver();

            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);

            if(driver != null){
                ScreenShot.screenshot(driver, tr.getTestClass().getRealClass().getSimpleName()+"."+tr.getMethod().getMethodName());
            }
        }
    }
    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;
    }

编写Assertion类

public class Assertion {
    public static boolean flag = true;
    public static List<AssertionError> errors = new ArrayList<AssertionError>();
    public static void verifyEquals(Object actual, Object expected) {
        try {
            Assert.assertEquals(actual, expected);
        } catch (AssertionError e) {
            errors.add(e);
            flag = false;
        }
    }
    public static void verifyEquals(Object actual, Object expected, String message) {
        try {
            Assert.assertEquals(actual, expected, message);
        } catch (AssertionError e) {
            errors.add(e);
            flag = false;
        }
    }
    public static void verifyNotEquals(Object actual, Object expected) {
        try {
            Assert.assertNotEquals(actual, expected);
        } catch (AssertionError e) {
            errors.add(e);
            flag = false;
        }
    }
    public static void verifyNotEquals(Object actual, Object expected, String message) {
        try {
            Assert.assertNotEquals(actual, expected, message);
        } catch (AssertionError e) {
            errors.add(e);
            flag = false;
        }
    }
    public static void verifyNulls(boolean actual, boolean expected) {
        try {
            Assert.assertEquals(actual, expected);
        } catch (AssertionError e) {
            errors.add(e);
            flag = false;
        }
    }

    public static void verifyNulls(boolean actual, boolean expected, String msg) {
        try {
            Assert.assertEquals(actual, expected, msg);
        } catch (AssertionError e) {
            errors.add(e);
            flag = false;
        }
    }


    public static void verifyTure(boolean actual){
        try{
            Assert.assertTrue(actual);
        }catch (AssertionError e){
            errors.add(e);
            flag = false;
        }
    }

    public static void verifyTure(boolean actual, String expected){
        try{
            Assert.assertTrue(actual, expected);
        }catch (AssertionError e){
            errors.add(e);
            flag = false;
        }
    }

    public static void verifyFalse(boolean actual){
        try{
            Assert.assertTrue(actual);
        }catch (AssertionError e){
            errors.add(e);
            flag = false;
        }
    }

    public static void verifyFalse(boolean actual, String expected){
        try{
            Assert.assertTrue(actual, expected);
        }catch (AssertionError e){
            errors.add(e);
            flag = false;
        }
    }

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

在xml添加监听

<listeners>
        <listener class-name="*****.AssertListener"></listener>
    </listeners>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值