【发布时间】:2019-07-02 11:30:35
【问题描述】:
问题来了。
我有一个具有@AfterMethod 方法的类,该方法适用于我所有的测试方法,除了两个测试(商业案例是它删除了我不想在每个方法之后删除的东西)。有没有办法忽略特定测试方法的@afterMethod?
我有一个解决方案,但它不是那么优雅,任何其他的灵魂都会受到高度赞赏。
实现这一点的一种方法是拥有一个扩展父类的子类,并且在类内部我可以覆盖@AfterMethod,但我更愿意将所有测试放在同一个地方。
【问题讨论】:
问题来了。
我有一个具有@AfterMethod 方法的类,该方法适用于我所有的测试方法,除了两个测试(商业案例是它删除了我不想在每个方法之后删除的东西)。有没有办法忽略特定测试方法的@afterMethod?
我有一个解决方案,但它不是那么优雅,任何其他的灵魂都会受到高度赞赏。
实现这一点的一种方法是拥有一个扩展父类的子类,并且在类内部我可以覆盖@AfterMethod,但我更愿意将所有测试放在同一个地方。
【问题讨论】:
最简单的方法如下:
@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());
}
}
【讨论】: