Разъяснение в документации JUnit5 по настройке зависимостей Maven

#maven #junit #documentation #junit5

#maven #junit #Документация #junit5

Вопрос:

На страницах JUnit5 запрашиваются уточняющие вопросы, которые должны быть размещены в StackOverflow, так что вот оно.

В руководстве пользователя говорится, что JUnit 5 = платформа JUnit JUnit Jupiter JUnit Vintage, и что платформа JUnit является «основой для запуска фреймворков тестирования». Итак, платформа JUnit звучит довольно важно.

В нем также говорится: «Чтобы узнать, какие артефакты доступны для загрузки и включения в ваш проект, обратитесь к метаданным зависимостей«. Когда вы идете туда, сначала отображается информация о платформе JUnit, 10.1.1. Платформа JUnit, идентификатор группы: org.junit.platform, версия: 1.6.2. Таким образом, это звучит так, как будто вы должны включить это в свои зависимости.

Тем не менее, Руководство пользователя также рекомендует обратиться в службу поддержки сборки. Там инструкции Maven рекомендуют включать maven-surefire-plugin , maven-failsafe-plugin junit-jupiter-api и junit-jupiter-engine .

В руководстве пользователя также предлагается ознакомиться с примерами проектов. Там пример Maven включает только артефакт junit-jupiter .

Итак, мой вопрос: какому предложению следовать? Каковы фактические инструкции?

Для обычного конечного пользователя, кажется, лучший вариант — следовать примеру проекта. Однако это отображается как последнее предложение на странице Руководства пользователя и, похоже, противоречит предшествующим объяснениям. Это создает немного ненужных догадок, и я бы предложил упростить эту часть руководства пользователя, чтобы перейти более непосредственно к сути.

Ответ №1:

Вы можете использовать junit-jupiter который представляет собой модуль, который будет включать в себя оба junit-jupiter-api и junit-jupiter-engine .

 /**
 * Aggregates all JUnit Jupiter modules.
 *
 * @since 5.4
 */
module org.junit.jupiter {
    requires transitive org.junit.jupiter.api;
    requires transitive org.junit.jupiter.engine;
    requires transitive org.junit.jupiter.params;
}
  

Этот pom, похоже, подходит для запуска (находится здесь), как указано в ссылке:

Для Maven ознакомьтесь с проектом junit5-jupiter-starter-maven.

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>junit5-jupiter-starter-maven</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>${maven.compiler.source}</maven.compiler.target>
        <junit.jupiter.version>5.6.2</junit.jupiter.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
            </plugin>
        </plugins>
    </build>

</project>
  

Итак:

  1. создать pom.xml как указано выше
  2. создайте тестовый класс в src/test/java/org/example/MyExampleTest.java:
 package org.example;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class MyExampleTest {

  @Test
  void thisFailsTest() {
    fail(); //start here
  }

}

  
  1. выполнить из терминала mvn test
  2. Сборка завершится с ошибкой следующим образом
 [INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ junit5-jupiter-starter-maven ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.example.MyExampleTest
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.017 s <<< FAILURE! - in org.example.MyExampleTest
[ERROR] thisFailsTest  Time elapsed: 0.014 s  <<< FAILURE!
org.opentest4j.AssertionFailedError: 
    at org.example.MyExampleTest.thisFailsTest(MyExampleTest.java:10)

[INFO] 
[INFO] Results:
[INFO] 
[ERROR] Failures: 
[ERROR]   MyExampleTest.thisFailsTest:10
[INFO] 
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
  
  1. удалите fail() и запустите полезный тест 🙂

Комментарии:

1. Спасибо. Я согласен с тем, что примерное предложение проекта, которое соответствует вашему, — это правильный путь. Мой вопрос был в основном направлен на улучшение страницы. Я немного подожду, чтобы принять ваш вопрос, чтобы повысить вероятность того, что они это увидят.

2. Я бы посоветовал вам создать проблему на Github, которая указывает на этот вопрос SO. Или даже запрос на извлечение с правильной рекомендацией.

3. Если вы хотите использовать модульность JPMS, используйте последнюю версию Surefire и перейдите на эту страницу maven.apache.org/surefire/maven-surefire-plugin/examples/… Если вы не используете JPMS, перейдите по ссылке maven.apache.org/surefire/maven-surefire-plugin/examples /…