spring boot:run
コマンドを使用してビルドおよびデプロイするときに、SpringBootアプリケーションの単体テストを実行するにはどうすればよいですか。
私の期待は、アプリケーションを実行する前にすべての単体テストを実行することですが、mvn test
以前のように別のmavenコマンドを作成したくありません。
私の問題:単純なSpring Bootアプリケーションを作成しましたが、intellijまたはコマンドラインからアプリケーションを実行しながら単体テストを実行する方法を見つけることができました。まず、テストクラスの構成や名前が間違っているか、プロジェクト構造が間違っているのではないかと思いました。そこで、intellijテンプレートからSpringBootアプリケーションを作成しました。幸いなことに、デフォルトのテストがすでに作成されているので、アプリケーションを実行するだけです。残念ながらテストは実行されませんでした。
これは、intellijによって作成されたプロジェクト構造、pom.xml、メインクラス、および単体テストのスクリーンショットです。intetelijによって作成されたプロジェクト
テストランナーとテストを失敗するように変更して、再試行しました。同じ結果。ユニットテストが失敗するように変更されました
spring boot:run
ここでコマンドの下に隠されているものをグーグルで検索しましたhttp://docs.spring.io/spring-boot/docs/current/maven-plugin/run-mojo.html
マニュアルの上部に興味深いものがありました。「それ自体を実行する前に、ライフサイクルフェーズのテストコンパイルの実行を呼び出します。」だから私の理解は、このコマンドはテストをコンパイルするだけで、それらを実行しないということですか?もしそうなら、質問は-コマンドにフラグを追加することで「テスト」フェーズを追加することは可能ですか?
ここでの問題は、Mavenのライフサイクルに関係しています。よるとドキュメントについてspring-boot:run
は、ライフサイクル相に結合するvalidate
デフォルトでは、位相を呼び出しtest-compile
実行する前に。
あなたが求めているのは、アプリケーションを実行する前にテストを実行することです。これは、POMのカスタムMavenプロファイルを使用して行うことができます-次のようなものです。
<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>
これをPOMに含めると、テストを実行して、次のコマンドでアプリを起動できます。
mvn -P test-then-run
これにより、run
目標がverify
フェーズではなくフェーズにバインドvalidate
されます。つまり、テストが最初に実行されます。フェーズが実行される順序は、https://maven.apache.org/ref/3.3.9/maven-core/lifecycles.htmlで確認できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加