如何在@AfterMethod

时间:2019-08-01 20:53:59

标签: java testng

我正在尝试找出一种方法,以在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块的顺序,因为第一块取决于第二块。

1 个答案:

答案 0 :(得分:2)

据我所知,您无法在@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(截至今天的最新发行版本)