Как настроить порядок выполнения тестов в TestNG?
Например:
public class Test1 {
@Test
public void test1() {
System.out.println("test1");
}
@Test
public void test2() {
System.out.println("test2");
}
@Test
public void test3() {
System.out.println("test3");
}
}
В вышеупомянутом комплекте порядок выполнения тестов произволен. Для одного выполнения вывод может быть:
test1
test3
test2
Как я выполняю тесты в порядке, в котором они были записаны?
Существуют способы выполнения тестов в заданном порядке. Однако обычно тесты должны быть повторяемыми и независимыми, чтобы гарантировать, что они тестируют только желаемую функциональность и не зависят от побочных эффектов кода за пределами того, что тестируется.
Итак, чтобы ответить на ваш вопрос, вам необходимо предоставить дополнительную информацию, например, ПОЧЕМУ важно запускать тесты в определенном порядке.
Тесты похожи на модульные? Зачем? Тесты ДОЛЖНЫ быть независимыми, иначе .... вы не сможете запустить тест индивидуально. Если они независимы, зачем вообще мешать? Плюс - что такое "порядок", если вы запускаете их в несколько потоков на нескольких ядрах?
В TestNG вы используете dependsOnMethods и/или dependsOnGroups:
@Test(groups = "a")
public void f1() {}
@Test(groups = "a")
public void f2() {}
@Test(dependsOnGroups = "a")
public void g() {}
В этом случае g() будет выполняться только после того, как f1() и f2() завершатся и будут успешными.
Множество примеров вы найдете в документации: http://testng.org/doc/documentation-main.html#test-groups
Если я правильно понял ваш вопрос в том смысле, что вы хотите запускать тесты в определенном порядке, можно использовать TestNG IMethodInterceptor. Посмотрите на http://beust.com/weblog2/archives/000479.html, как их использовать.
Если вам нужна предварительная инициализация, посмотрите на IHookable http://testng.org/javadoc/org/testng/IHookable.html и связанный с ним поток http://groups.google.com/group/testng-users/browse_thread/thread/42596505990e8484/3923db2f127a9a9c?lnk=gst&q=IHookable#3923db2f127a9a9c