覆盖某些测试的TestNG批注

时间:2019-07-02 11:30:35

标签: java testng

这是问题。

我有一个具有@AfterMethod方法的类,该方法适用于除两个测试之外的所有测试方法(业务案例是它删除了我不想在每个方法之后删除的内容)。是否可以忽略特定测试方法的@afterMethod?

我有一个解决方案,但它不是那么优雅,任何其他灵魂都将受到高度重视。

做到这一点的一种方法是让子类扩展父类,并且在类内部我可以覆盖@AfterMethod,但我希望将所有测试都放在同一位置。

1 个答案:

答案 0 :(得分:0)

最简单的方法如下:

  • 定义一个自定义批注,使用该批注会指出需要跳过特定测试方法的配置。
  • 使用此新注释注释所有要跳过其配置的@Test方法。
  • 在您的配置方法中,检查传入的方法是否具有此注释,如果是,则跳过执行。

下面是一个示例,显示了所有这些操作。

标记注释,指示将跳过配置方法。

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target({METHOD, TYPE})
public @interface SkipConfiguration {

}

样本测试班

import java.lang.reflect.Method;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.Test;

public class TestClassSample {

  @Test
  @SkipConfiguration
  public void foo() {}

  @Test
  public void bar() {}

  @AfterMethod
  public void teardown(Method method) {
    SkipConfiguration skip = method.getAnnotation(SkipConfiguration.class);
    if (skip != null) {
      System.err.println("Skipping tear down for " + method.getName());
      return;
    }
    System.err.println("Running tear down for " + method.getName());
  }
}