Spring Boot n'exécute pas de tests unitaires


www

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:runcommande.

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 testavant.

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:runcommande 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?

Olambert

Votre problème ici est lié au cycle de vie de maven. Selon la documentation du spring-boot:run, il se lie validatepar défaut à la phase du cycle de vie et appelle la phase test-compileavant 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' runobjectif à la verifyphase au lieu de la validatephase, 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

Articles connexes


Maven n'exécute pas les tests Spring Boot

Publier: J'ai une API REST Spring Boot rest que je veux tester. Je peux exécuter les tests manuellement dans Eclipse (sans maven et en exécutant l'application en tant que test JUnit) et cela fonctionne bien et affiche les résultats, mais mvn testne "fonctionne

Gradle n'exécute pas de tests

Jan Horčička: Dans mon projet Gradle, j'ai un test JUnit très simple: import org.junit.jupiter.api.Test import static org.junit.jupiter.api.Assertions.fail class ApiCallerTest { @Test void testSetApiKey() { fail(); } } Lorsque j'exécute

Nose n'exécute pas de tests

DR Supposons que vous ayez un package python nommé A avec la structure de répertoires suivante A ├── B.py └── __init__.py où __init__.pyest vide et le contenu de B.pyest donné par def test_B(): assert False Le nez qui coule sur le simple paquet ci-dessus

Visual Studio 15.8.1 n'exécute pas les tests unitaires MS

csharpsql: Lorsque j'ai mis à jour Visual Studio vers la dernière version, 1 de mes projets de test a arrêté d'exécuter des tests et a généré ce message: Le projet de test {} ne fait référence à aucun adaptateur NuGet .NET. La découverte ou l'exécution de test

Pourquoi rdmd n'exécute-t-il pas tous les tests unitaires?

John Doucette Malheureusement, je n'arrive pas à reproduire ce comportement dans un exemple de travail minimal, donc cela peut être trop vague. Cependant, je peux au moins dire ce qui ne cause pas le comportement. J'ai un module D contenant plusieurs classes a

Visual Studio 2015 n'exécute pas les tests unitaires C++

imekon C'est bizarre. Premièrement, le chargement de la solution ne détecte pas les deux tests unitaires - je dois modifier le test unitaire et effectuer une reconstruction pour que les tests apparaissent dans l'explorateur de tests. Une fois que j'ai fait cel