Testng-如果测试方法失败,如何使AfterClass方法失败?

问题描述 投票:0回答:1

我希望AfterClass代码在发生任何故障之前都不会运行。也就是说,如果测试失败,则AfterClass不应该运行。我该如何实现?

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Testing {
    @BeforeClass
    public void b4class(){
        System.out.println("b4class");
    }

    @Test
    public void t1(){
        System.out.println("t1");
        throw new IllegalArgumentException("BOOM");
    }

    @AfterClass(alwaysRun = false)
    public void afterClass(){
        System.out.println("afterClass");
    }

}
java testng
1个回答
0
投票

您可以做这样的事情

@Listeners({Testing.MethodInterceptor.class})
public class Testing {

    @BeforeClass
    public void b4class(){
        System.out.println("b4class");
    }

    @Test
    protected void t1(){
        System.out.println("t1");
        throw new IllegalArgumentException("BOOM");
    }

    @AfterClass
    public void afterClass(){
        System.out.println("afterClass");
    }

    public static class MethodInterceptor implements IInvokedMethodListener {

        int status = ITestResult.SUCCESS;

        @Override
        public void beforeInvocation(final IInvokedMethod method, final ITestResult testResult) {
            if (method.isConfigurationMethod()
                    && method.getTestMethod().getMethodName().equals("afterClass")
                    && ITestResult.FAILURE == status) {
                throw new IllegalStateException("BIG BOOM");
            }
        }

        @Override
        public void afterInvocation(final IInvokedMethod method, final ITestResult testResult) {
            if (method.getTestMethod().getMethodName().equals("t1")) {
                status = testResult.getStatus();
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.