我正在尝试找出一种方法,以在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块的顺序,因为第一块取决于第二块。
答案 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
(截至今天的最新发行版本)