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