Разница между junit-jupiter-api и junit-jupiter-engine

В чем разница между модулями maven junit-jupiter-api и junit-jupiter-engine? Нужно ли включать обе зависимости в build.gradle?

Нужно ли писать обе зависимости вроде

testCompile("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
testCompile("org.junit.jupiter:junit-jupiter-api:${junitVersion}")

или

testCompile("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")

достаточно?

И мне нужно добавить зависимость от junit-vintage-engine?

Ответ 1

JUnit до версии 5.4

Из документов:

junit-jupiter-api

JUnit Jupiter API для написания тестов и расширений.

junit-jupiter-engine

Реализация движка JUnit Jupiter, требуется только во время выполнения.

junit-vintage-engine

Реализация механизма тестирования JUnit Vintage, позволяющая запускать старинные тесты JUnit, т.е. тесты, написанные в стиле JUnit 3 или JUnit 4, на новой платформе JUnit.

Итак...

  • Для написания и запуска тестов JUnit5 вам нужны junit-jupiter-api и junit-jupiter-engine
  • Вам понадобится junit-vintage-engine только в том случае, если (a) вы работаете с JUnit5 и (b) ваши тесты используют JUnit4 constructs/annotations/rules и т.д.

JUnit с версии 5.4 и выше

В JUnit 5.4 это упрощено, см. этот ответ для более подробной информации.

Ответ 2

Отметим, что junit-jupiter-api включен в качестве подчиненной зависимости в junit-jupiter-engine Maven. Так что вам нужно всего лишь добавить junit-jupiter-engine чтобы получить и то, и другое. Я уверен, что Gradle это то же самое. https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine/5.1.1

Ответ 3

артефакт junit-jupiter

JUnit 5.4 предоставляет гораздо более простую конфигурацию Maven, если вы собираетесь писать тесты JUnit 5. Просто укажите совокупный артефакт с именем junit-jupiter.

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.4.2</version>
    <scope>test</scope>
</dependency>

Для вашего удобства этот совокупный артефакт автоматически извлекает следующие три артефакта:

В вашем проекте вы также получите:

  • JUnit-платформенные-Обще-1.4.0.jar
  • JUnit-платформа двигатель 1.4.0.jar

Вышесказанное - это то, что вам нужно для написания и запуска тестов JUnit 5 на основе новой парадигмы Jupiter.

Наследственные тесты

Если в вашем проекте есть тесты JUnit 3 или 4, которые вы хотите продолжать выполнять, добавьте еще одну зависимость для JUnit Vintage Engine, junit-vintage-engine. Смотрите руководство от IBM.

<!-- https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine -->
<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <version>5.4.2</version>
    <scope>test</scope>
</dependency>