それより前にエラーが発生した場合は、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");
}
}
TestNG リスナーを使用して、デフォルトの動作をオーバーライドできます。たとえば、それを実行できる非常に単純なリスナー
@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();
}
}
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加