SpringBoot не запускает модульные тесты при добавлении в dependencyManagement - PullRequest
1 голос
/ 12 марта 2020

Предполагается, что мой проект унаследован от пользовательского родителя и в то же время используется Spring Boot. Стандартное решение для этого - использование секции <dependencyManagement>, как описано здесь .

Проблема в том, что при добавлении зависимости Spring Boot в секцию maven не видит никаких модульных тестов ( Тестовые прогоны = 0). Я воспроизвел это с артефактами spring-boot-dependencies и spring-boot-starter.

Шаги для воспроизведения:

  1. создайте проект maven с одним модульным тестом SampleTest и следующим pom.
  2. Выполнить mvn test.
  3. увидеть, что SampleTest запущен и не удалось
  4. раскомментировать блок в <dependencyManagement> для импорта Spring Boot
  5. Выполнить mvn test
  6. не видно ни одного теста, и сборка прошла успешно.

У меня были похожие проблемы с более старыми версиями surefire, которые не могли найти JUnit5 тестов в аналогичным образом. Но эффективная помпа показывает, что в этом случае версии плагинов правильно установлены на 3.0.0-M4 и не переопределяются SpringBoot.

Не могли бы вы помочь мне решить проблему с запущенными тестами и правильно применить Spring Boot в этом случае?


src/test/java/org/example/SampleTest.java

package org.example;

import org.junit.jupiter.api.*;

class SampleTest{
    @Test
    void test(){
        Assertions.assertEquals(0, 1);
    }
}

pom.xml

Следующий образец не имеет parent: я только что скопировал плагины и зависимости от них, чтобы сделать его кратким.

<?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>org.example</groupId>
    <artifactId>spring-boot-import</artifactId>
    <version>1.0</version>

    <dependencyManagement>
    <!-- when this block in uncommented no unit tests are found in the project-->

    <!--
        <dependencies>
          <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.2.5.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
    -->
    </dependencyManagement>

    <properties>
        <version.java>11</version.java>
        <version.junit.jupiter>5.6.0</version.junit.jupiter>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <compilerVersion>${version.java}</compilerVersion>
                    <release>${version.java}</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M4</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>3.0.0-M4</version>
            </plugin>
        </plugins>
    </build>

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

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Другое решение - просто определить импорт для Юпитера Юпитера до весенней загрузки. Это также решает проблему.

  <dependencyManagement>
    <dependencies>    
      <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
        <version>5.6.0</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.2.5.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
1 голос
/ 12 марта 2020

Включение зависимостей spring-boot-dependencies изменяет транзитивные зависимости junit-jupiter-engine.

Вывод mvn dependency:tree покажет это.

До

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ spring-boot-import ---
[INFO] org.example:spring-boot-import:jar:1.0
[INFO] \- org.junit.jupiter:junit-jupiter-engine:jar:5.6.0:test
[INFO]    +- org.apiguardian:apiguardian-api:jar:1.1.0:test
[INFO]    +- org.junit.platform:junit-platform-engine:jar:1.6.0:test
[INFO]    |  +- org.opentest4j:opentest4j:jar:1.2.0:test
[INFO]    |  \- org.junit.platform:junit-platform-commons:jar:1.6.0:test
[INFO]    \- org.junit.jupiter:junit-jupiter-api:jar:5.6.0:test

После

[INFO] org.example:spring-boot-import:jar:1.0
[INFO] \- org.junit.jupiter:junit-jupiter-engine:jar:5.6.0:test
[INFO]    +- org.apiguardian:apiguardian-api:jar:1.1.0:test
[INFO]    +- org.junit.platform:junit-platform-engine:jar:1.5.2:test
[INFO]    |  +- org.opentest4j:opentest4j:jar:1.2.0:test
[INFO]    |  \- org.junit.platform:junit-platform-commons:jar:1.5.2:test
[INFO]    \- org.junit.jupiter:junit-jupiter-api:jar:5.5.2:test

Как видите, junit-platform-engine и друзья изменились с 1.6.0 на 1.5 .2 и API от 5.6.0 до 5.5.2 . Поскольку эти банки являются несовместимыми версиями, ваши тесты больше не будут выполняться.

Чтобы исправить это, вы можете сделать 1 из следующих

  1. Добавить все дополнительные переходные зависимости с явной версией
  2. Добавить также junit-bom к Раздел dependencyManagement перед Spring Boot, чтобы заставить версии
  3. понизить версию до JUnit 5.5.2, чтобы привести ее в соответствие с управляемой версией Spring Boot
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...