Reputation: 95
here is the question.
I have a class that has an @AfterMethod method, the method applies for all my test methods except two tests(The business case is that it deletes something I don't want to be deleted after each method). Is there a way to ignore the @afterMethod for a specific test method ?
I have a solution but it's not that elegant, any other soultions would be highly apreciated.
One way to do this is by having a child class that extends the parent class, and inside the class I can override the @AfterMethod, but I would prefer to have all the tests in the same place.
Upvotes: 0
Views: 1741
Reputation: 14736
The easiest way of doing this would be as below:
@Test
methods for which config is to be skipped using this new annotation.Below is a sample that shows all of this in action.
Marker annotation that indicates that a configuration method is to be skipped.
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 {
}
Sample test class
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());
}
}
Upvotes: 1