是否可以按特定顺序调用@AfterMethod方法?
我有一个示例代码:
public class PriorityTest {
@BeforeClass(alwaysRun = true)
public void setUp() throws Exception {
System.out.println("BeforeClass PriorityTest.java");
}
@Test
public void defaultPriority(){
System.out.println("default");
}
@Test (priority = 3)
public void t1(){
System.out.println("t1");
}
@Test (priority = 2)
public void t2(){
System.out.println("t2");
}
@Test (priority = 1)
public void t3(){
System.out.println("t3");
}
@Test (priority = -1)
public void t_1(){
System.out.println("t -1");
}
@AfterMethod
public void after2(){
System.out.println("after2");
}
@AfterMethod
public void after1(){
System.out.println("after1");
}
}
@Test的优先级工作完美。我想对@AfterMethod进行同样的操作,但是当我编写代码
@AfterMethod (priority = 1)
时,这是编译错误。当我没有优先级运行时,总是按字母顺序排列(仅方法名称很重要)。这是输出:
BeforeClass PriorityTest.javat -1after1after2defaultafter1after2t3after1after2t2after1after2t1after1after2
是否有可能以特定顺序调用该方法(例如特殊参数或注释)?
PS。我知道我可以编写一个AfterMethod,然后按特定顺序调用方法,但是我想到了许多AfterMethod批注。
最佳答案
@AfterMethod
不支持priority
参数。但是它具有dependsOnMethods
和dependsOnGroups
可以代替使用。
取决于方法
此方法所依赖的方法列表。不能保证所依赖的方法的运行顺序,但是可以保证所有这些方法都将在包含此批注的测试方法运行之前运行。此外,如果这些方法中的任何一个都不是SUCCESS,则该测试方法将不会运行,并将被标记为SKIP。如果其中某些方法已重载,则将运行所有重载的版本。
dependOnGroups
此方法所依赖的组列表。这些组之一的每个方法成员都必须在此方法之前被调用。此外,如果这些方法中的任何一个都不是SUCCESS,则该测试方法将不会运行,并将被标记为SKIP。
在您的情况下,可以使用dependsOnMethods
。
@AfterMethod
public void after2(){
System.out.println("after2");
}
@AfterMethod(dependsOnMethods = "after2")
public void after1(){
System.out.println("after1");
}