Comment puis-je exécuter des tests unitaires pour l'application Spring Boot lors de la création et du déploiement à l'aide de la spring boot:run
commande.
Je m'attends à ce que tous mes tests unitaires soient exécutés avant d'exécuter l'application, mais je ne veux pas faire une autre commande maven comme mvn test
avant.
Mon problème: j'ai créé une simple application Spring Boot et je pourrais trouver un moyen d'exécuter des tests unitaires tout en exécutant l'application à partir d'intellij ou de la ligne de commande. Premièrement, je pensais que j'avais peut-être une mauvaise configuration ou de mauvais noms de classe de test ou peut-être une mauvaise structure de projet. J'ai donc créé une application de démarrage de printemps à partir d'un modèle intellij. À mon bonheur, il avait déjà un test par défaut écrit donc je lance simplement l'application. Malheureusement, le test n'a pas été exécuté.
Ceci est une capture d'écran de la structure du projet, pom.xml, de la classe principale et du test unitaire créés par intellij. Projet créé par intetelij
J'ai changé le lanceur de test et le test pour échouer et j'ai essayé à nouveau. Même résultat. test unitaire modifié pour échouer
J'ai recherché sur Google ce qui est caché sous la spring boot:run
commande ici http://docs.spring.io/spring-boot/docs/current/maven-plugin/run-mojo.html
J'ai trouvé quelque chose d'intéressant en haut du manuel: "Invoque l'exécution de la phase de test-compilation du cycle de vie avant de s'exécuter." Donc, je crois comprendre que cette commande ne compile que les tests mais ne les exécute pas? Si oui, la question est - Est-il possible d'ajouter une phase de "test" en ajoutant un drapeau à la commande?
Votre problème ici est lié au cycle de vie de maven. Selon la documentation du spring-boot:run
, il se lie validate
par défaut à la phase du cycle de vie et appelle la phase test-compile
avant de s'exécuter.
Ce que vous demandez, c'est d' exécuter les tests avant d'exécuter l'application. Vous pouvez le faire avec un profil maven personnalisé dans votre POM - quelque chose comme ce qui suit.
<project>
<profiles>
<profile>
<id>test-then-run</id>
<build>
<defaultGoal>verify</defaultGoal>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>spring-boot-run</id>
<phase>verify</phase>
<goals>
<goal>run</goal>
</goals>
<inherited>false</inherited>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
...
</profiles>
...
</project>
Avec ceci dans votre POM, vous pouvez ensuite exécuter les tests et démarrer l'application avec:
mvn -P test-then-run
Cela lie l' run
objectif à la verify
phase au lieu de la validate
phase, ce qui signifie que les tests seront exécutés en premier. Vous pouvez voir dans quel ordre les phases sont exécutées ici: https://maven.apache.org/ref/3.3.9/maven-core/lifecycles.html
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots