TestNG - @AfterMethod的优先级

时间:2016-04-19 08:26:19

标签: java testng

是否可以按特定顺序调用@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.java t -1 after1 after2 default after1 after2 t3 after1 after2 t2 after1 after2 t1 after1 after2

是否有可能按特定顺序调用该方法(例如特殊参数或注释)?

PS。我知道我可以编写一个AfterMethod,然后按特定顺序调用方法,但我想到许多AfterMethod注释。

2 个答案:

答案 0 :(得分:6)

@AfterMethod不支持priority参数。但它可以使用dependsOnMethodsdependsOnGroups代替。

<强> dependsOnMethods

  

此方法所依赖的方法列表。无法保证所依赖的方法的运行顺序,但保证在运行包含此批注的测试方法之前运行所有这些方法。此外,如果这些方法中的任何一个不是SUCCESS,则不会运行此测试方法,并将其标记为SKIP。如果其中一些方法已经过载,则将运行所有重载版本。

<强> dependsOnGroups

  

此方法所依赖的组列表。保证在此方法之前调用其中一个组的每个方法成员。此外,如果这些方法中的任何一个不是SUCCESS,则不会运行此测试方法,并将其标记为SKIP。

在您的情况下,dependsOnMethods可以使用。

@AfterMethod
public void after2(){
    System.out.println("after2");
}
@AfterMethod(dependsOnMethods = "after2")
public void after1(){
    System.out.println("after1");
}

答案 1 :(得分:1)

尝试使用dependsOnMethods:

@AfterMethod(dependsOnMethods= { "after2" })
public void after1(){
    System.out.println("after1");