Java >> Java-zelfstudie >  >> Tag >> Spring

SpringBoot voert geen eenheidstests uit wanneer toegevoegd aan dependencyManagement

Mijn project wordt verondersteld te worden geërfd van een aangepaste ouder en tegelijkertijd Spring Boot . te gebruiken .De standaardoplossing daarvoor is het gebruik van <dependencyManagement> sectie zoals hier beschreven.

Het probleem is wanneer een Spring Boot afhankelijkheid is toegevoegd aan de sectie, ziet maven geen eenheidstests (Testruns =0). Ik heb dat gereproduceerd met artefacten spring-boot-dependencies en spring-boot-starter .

Stappen om te reproduceren:

  1. maak een maven-project met één eenheidstest SampleTest en de volgende pom.
  2. voer mvn test uit .
  3. zie dat SampleTest is uitgevoerd en mislukt
  4. verwijder het blok in <dependencyManagement> Spring Boot importeren
  5. voer mvn test uit
  6. zie dat er geen tests zijn uitgevoerd en de build is geslaagd.

Ik had soortgelijke problemen met oudere versies van surefire , die JUnit5 . niet kon vinden op een vergelijkbare manier testen. Maar de effectieve pom laat zien dat in dit geval de versies van plug-ins correct zijn ingesteld op 3.0.0-M4 en niet overschreven door SpringBoot.

Kun je me helpen het probleem met het uitvoeren van tests op te lossen en Spring Boot correct toe te passen in dit geval?

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

Het volgende voorbeeld heeft geen ouder:ik heb zojuist plug-ins en afhankelijkheden daarvan gekopieerd om het beknopt te houden.

<?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 is 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>

Antwoord

Inclusief de spring-boot-dependencies afhankelijkheden verandert de transitieve afhankelijkheden van de junit-jupiter-engine afhankelijkheid.

De uitvoer van mvn dependency:tree zal dit laten zien.

Vroeger

[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

Na

[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

Zoals je kunt zien, is de junit-platform-engine en vrienden gewijzigd van 1.6.0 tot 1.5.2 en de API van 5.6.0 tot 5.5.2 . Omdat die potten incompatibele versies zijn, worden uw tests niet meer uitgevoerd.

Om dit op te lossen kun je een van de volgende dingen doen

  1. Voeg alle aanvullende, transitieve, afhankelijkheden toe met een expliciete versie
  2. Voeg de junit-bom . toe ook naar de dependencyManagement sectie vóór de Spring Boot-versie, om de versies te forceren
  3. Downgraden naar JUnit 5.5.2 om af te stemmen op de door Spring Boot beheerde versie

Java-tag