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:
- maak een maven-project met één eenheidstest
SampleTest
en de volgende pom. - voer
mvn test
uit . - zie dat
SampleTest
is uitgevoerd en mislukt - verwijder het blok in
<dependencyManagement>
Spring Boot
importeren - voer
mvn test
uit - 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
- Voeg alle aanvullende, transitieve, afhankelijkheden toe met een expliciete versie
- Voeg de
junit-bom
. toe ook naar dedependencyManagement
sectie vóór de Spring Boot-versie, om de versies te forceren - Downgraden naar JUnit 5.5.2 om af te stemmen op de door Spring Boot beheerde versie