我试图找出一种方法,在TetstNG中是否有任何方法可以将用@Test注释的测试方法标记为在@AfterMethod内部失败。

@Test
public void sampleTest() {
    // do some stuff
}

@AfterMethod
public void tearDown() {
    // 1st operation
    try {
        // some operation
    } catch(Exception e) {
        // mark sampleTest as failed
    }

    // 2nd operation
    try {
        // perform some cleanup here
    } catch (Exception e) {
        // print something
    }
}


我需要在所有测试中进行一些验证,这些测试是在try-catch中的第一个tearDown()块下进行的。如果该块中有异常,请将测试标记为失败。然后继续下一个try-catch块。

我无法反转tearDown()中try-catch块的顺序,因为第一块取决于第二块。

最佳答案

据我所知,您无法在@AfterMethod配置方法中执行此操作,因为传递给您的配置方法的ITestResult对象[是的,您可以通过向您的参数中添加参数ITestResult result来访问测试方法的结果对象@AfterMethod带注释的方法]不用于更新原始测试方法的结果。

但是,如果要利用IHookable界面,则可以轻松地做到这一点。
您可以通过参考官方文档here获得有关IHookable的更多信息。

这是一个演示此操作的示例。

import org.testng.IHookCallBack;
import org.testng.IHookable;
import org.testng.ITestResult;
import org.testng.annotations.Test;

public class TestClassSample implements IHookable {

  @Test
  public void testMethod1() {
    System.err.println("testMethod1");
  }

  @Test
  public void failMe() {
    System.err.println("failMe");
  }

  @Override
  public void run(IHookCallBack callBack, ITestResult result) {
    callBack.runTestMethod(result);
    if (result.getMethod().getMethodName().equalsIgnoreCase("failme")) {
      result.setStatus(ITestResult.FAILURE);
      result.setThrowable(new RuntimeException("Simulating a failure"));
    }
  }
}


注意:我使用的是TestNG 7.0.0-beta7(截至今天的最新发行版本)

09-26 21:32