Как изменить порядок выполнения тестов в 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

Другие вопросы по тегам