Как изменить порядок выполнения тестов в JUnit5?
JUnit4 имеет @FixMethodOrder
аннотация, позволяющая использовать алфавитный порядок выполнения тестовых методов. Есть ли аналогичный механизм JUnit5?
3 ответа
Нет, не сейчас. Для модульных тестов порядок выполнения не должен иметь значения. Для более сложных тестов JUnit стремится обеспечить явную поддержку - упорядочение тестов будет частью этого.
Теперь это возможно с использованием версий снимков JUnit 5.
https://junit.org/junit5/docs/snapshot/user-guide/
Чтобы контролировать порядок выполнения тестовых методов, аннотируйте ваш тестовый класс или тестовый интерфейс с помощью @TestMethodOrder и укажите желаемую реализацию MethodOrderer. Вы можете реализовать свой собственный метод MethodOrderer или использовать одну из следующих встроенных реализаций MethodOrderer.
Буквенно-цифровой: сортирует методы тестирования буквенно-цифрово на основе их имен и списков формальных параметров.
OrderAnnotation: сортирует методы тестирования численно на основе значений, указанных в аннотации @Order.
Использование версий снимков (Gradle):
repositories {
// sonatype - JUnit snapshots
maven {
url "https://oss.sonatype.org/content/repositories/snapshots/"
}
}
dependencies {
testImplementation "org.junit.jupiter:junit-jupiter-api:5.4.0-SNAPSHOT"
testImplementation "org.junit.platform:junit-platform-commons:1.4.0-SNAPSHOT"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.4.0-SNAPSHOT"
testRuntimeOnly "org.junit.platform:junit-platform-engine:1.4.0-SNAPSHOT"
}
Конечно, моментальные снимки менее стабильны, чем выпуски, поэтому либо используйте их на свой страх и риск, загрузите и ссылайтесь на конкретную версию моментального снимка, либо дождитесь версии 5.4.0.
Начиная с версии 5.8.0 , также можно заказать тестовые классы.
SRC / тест / ресурсы / junit-platform.properties:
# ClassOrderer$OrderAnnotation sorts classes based on their @Order annotation
junit.jupiter.testclass.order.default=org.junit.jupiter.api.ClassOrderer$OrderAnnotation
Другие реализации встроенного в Junit упорядочителя классов:
org.junit.jupiter.api.ClassOrderer$ClassName
org.junit.jupiter.api.ClassOrderer$DisplayName
org.junit.jupiter.api.ClassOrderer$Random
Чтобы узнать о других способах (кроме файла junit-platform.properties ) установить параметры конфигурации, см. Здесь .
Вы также можете указать своего заказчика. Он должен реализовывать интерфейс ClassOrderer :
package foo;
public class MyOrderer implements ClassOrderer {
@Override
public void orderClasses(ClassOrdererContext context) {
Collections.shuffle(context.getClassDescriptors());
}
}
junit.jupiter.testclass.order.default=foo.MyOrderer
Обратите внимание, что
@Nested
Классы тестов не могут быть заказаны ClassOrderer .
Обратитесь к документации JUnit 5 и по ClassOrderer, чтобы узнать больше о порядке упорядочивания тестовых классов.документацииAPI