2016-04-19 2 views
3

Можно ли вызвать методы @AfterMethod в определенном порядке? У меня есть пример кода: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

Есть ли возможность вызова, что методы в определенном порядке (например, специальный paremeter или аннотация)?

PS. Я знаю, что могу написать один AfterMethod, а затем вызвать методы в определенном порядке, но я думаю о многих аннотациях AfterMethod.

ответ

4

@AfterMethod не поддерживает priority параметр. Но он имеет dependsOnMethods и dependsOnGroups, которые можно использовать вместо этого.

dependsOnMethods

Список методов этот метод зависит. Нет гарантии того, на каком порядке будут выполняться методы, но вам гарантировано, что все эти методы будут запущены до запуска метода тестирования, который содержит эту аннотацию. Кроме того, если какой-либо из этих методов не был УСПЕХОМ, этот метод тестирования не будет запущен и будет помечен как SKIP. Если некоторые из этих методов были перегружены, все перегруженные версии будут запущены.

dependsOnGroups

Список групп этого метода зависит от. Кажется, что каждый метод из одной из этих групп был вызван до этого метода. Кроме того, если какой-либо из этих методов не был УСПЕХОМ, этот метод тестирования не будет запущен и будет помечен как SKIP.

В вашем случае dependsOnMethods может использоваться.

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

Очень полный ответ, спасибо :) – kotoj

1

попробуйте использовать dependsOnMethods:

@AfterMethod(dependsOnMethods= { "after2" }) 
public void after1(){ 
    System.out.println("after1"); 
Смежные вопросы