【问题标题】:Overriding TestNG annotation for certain test覆盖某些测试的 TestNG 注释
【发布时间】:2019-07-02 11:30:35
【问题描述】:

问题来了。

我有一个具有@AfterMethod 方法的类,该方法适用于我所有的测试方法,除了两个测试(商业案例是它删除了我不想在每个方法之后删除的东西)。有没有办法忽略特定测试方法的@afterMethod?

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

实现这一点的一种方法是拥有一个扩展父类的子类,并且在类内部我可以覆盖@AfterMethod,但我更愿意将所有测试放在同一个地方。

【问题讨论】:

标签: java testng


【解决方案1】:

最简单的方法如下:

  • 定义一个自定义注释,使用该注释说明需要跳过特定测试方法的配置。
  • 使用此新注释来注释所有要跳过其配置的 @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());
  }
}

【讨论】:

  • 效果很好
猜你喜欢
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 2011-12-08
相关资源
最近更新 更多