Java « Порядок вызова тестов в JUNIT

Как можно организовать что бы тесты выполнялись в определенном порядке? По умолчанию тесты вызываются в неопределенном порядке.

1 ответов


вообще-то тесты должны быть независимы друг от друга
если нужен определенный порядок - объедините в 1 юнит тест

если дело в инициализации - http://junit.sourceforge.net/doc/faq/faq.htm#organize_3

как вариант - вот кто-то решал проблему


Напишите свой TestRunner.

Именно так поступает Spring framework, он также добавляет свои аннотации над методами тестов, например для отката транзакиций при тестировании DAO / Service слоя приложения и т.д.

Примеры: org.springframework.test.context.junit4.SpringJUnit4ClassRunner

Рекомендую изучить его исходный код и все аннотации что идут (работают) вместе с этим классом в Spring.

TestRunner регистрируется с помощью аннотации org.junit.runner.RunWith над классом с тестами.

Вы можете обявить свою аннотацию над методом, типа @Ordered(order = 23):



@RunWith(OrderedTestRunner.class)
public class OrderedTests {

    @Test
    @Ordered(order = 23)
    public void someTest() {
        // stub
        assertTrue( Boolean.TRUE );
    }

}
 

Ваш OrderedTestRunner будет работать с TestContextManager-ом в котором будут ваши необходимые ExecutionListener-ы, в одном из которых будет тот Listener который и будет работать с аннотацией Ordered.


Посмотрите мою заметку на эту тему:
Как запускать junit тесты в том порядке, в котором они находятся в исходном коде, и почему это не лучшая идея:
Порядок выполнения junit тестов