統合テストの実行
Spring Boot アプリケーションはテスト(またはテストスイート)自体から非常に簡単に起動できますが、ビルド自体で処理することが望ましい場合があります。Spring Boot アプリケーションのライフサイクルが統合テストを中心に適切に管理されていることを確認するには、次の例に示すように、start
および stop
ゴールを使用できます。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
このようなセットアップでは、フェイルセーフプラグイン [Apache] (英語) を使用して、期待どおりに統合テストを実行できます。
アプリケーションは別のプロセスで開始され、アプリケーションとの通信には JMX が使用されます。デフォルトでは、プラグインはポート 9001 を使用します。JMX ポートを構成する必要がある場合は、専用の例を参照してください。 |
特定のプロパティが設定されたときに統合テストをスキップするように、より高度なセットアップを構成することもできます。専用の例を参照してください。
Spring Boot の親 POM なしでフェイルセーフを使用する
Spring Boot の親 POM である spring-boot-starter-parent
は、フェイルセーフの <classesDirectory>
を ${project.build.outputDirectory}
に構成します。この構成がないと、Failsafe は再パッケージ化された jar ではなくコンパイルされたクラスを使用するため、Failsafe はアプリケーションのクラスをロードできません。親 POM を使用していない場合は、次の例に示すように、同じ方法でフェイルセーフを構成する必要があります。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<classesDirectory>${project.build.outputDirectory}</classesDirectory>
</configuration>
</plugin>
spring-boot:start
org.springframework.boot:spring-boot-maven-plugin:3.3.5
Spring のアプリケーションを開始します。run
のゴールに反して、これはブロックせず、他のゴールがアプリケーションで動作することを許可します。このゴールは、通常、テストスイートの前にアプリケーションが開始され、その後に停止される統合テストシナリオで使用されます。
オプションのパラメーター
名前 | タイプ | デフォルト |
---|---|---|
|
| |
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
|
| |
|
| |
| ||
| ||
|
| |
| ||
| ||
|
| |
| ||
|
| |
|
| |
|
パラメーターの詳細
addResources
maven リソースをクラスパスに直接追加します。これにより、リソースのライブインプレース編集が可能になります。重複するリソースは、ClassLoader.getResources()
が呼び出された場合に 2 回表示されるのを防ぐために、target/classes
から削除されます。代わりに spring-boot-devtools
をプロジェクトに追加することを検討してください。これは、この機能とその他多くの機能を提供します。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
|
additionalClasspathElements
クラスパスに追加する必要がある追加のクラスパス要素。要素は、クラスとリソースを含むディレクトリ、または jar ファイルです。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
agents
エージェント jar へのパス。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
classesDirectory
アプリケーションの実行に使用するクラスとリソースファイルを含むディレクトリ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
|
commandlineArguments
アプリケーションに渡す必要のあるコマンドラインからの引数。スペースを使用して複数の引数を区切り、引用符で複数の値を囲むようにしてください。指定すると、#arguments
よりも優先されます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
directories
クラスパスに追加する必要があるクラスまたはリソースを含む追加のディレクトリ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
environmentVariables
アプリケーションの実行に使用されるフォークされたプロセスに関連付ける必要がある環境変数のリスト。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
excludeGroupIds
除外する groupId 名のカンマ区切りリスト (完全一致)。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
excludes
除外するアーティファクト定義のコレクション。Exclude
要素は、必須の groupId
および artifactId
コンポーネントとオプションの classifier
コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
includes
含めるアーティファクト定義のコレクション。Include
要素は、必須の groupId
および artifactId
コンポーネントとオプションの classifier
コンポーネントを定義します。プロパティとして構成する場合、値はコンマで区切られ、コンポーネントはコロンで区切られる必要があります: groupId:artifactId,groupId:artifactId:classifier
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
jmxName
spring アプリケーションのライフサイクルを管理する、自動的にデプロイされた MBean の JMX 名。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ | |
開始 |
jvmArguments
アプリケーションの実行に使用されるフォークされたプロセスに関連付ける必要がある JVM 引数。コマンドラインでは、複数の値を引用符で囲んでください。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
mainClass
メインクラスの名前。指定しない場合、"main" メソッドを含む最初に見つかったコンパイル済みクラスが使用されます。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
maxAttempts
Spring アプリケーションの準備ができているかどうかを確認する最大試行回数。"wait" 引数と組み合わせると、グローバルタイムアウト値が得られます (デフォルトでは 30 秒)
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
noverify
エージェントが -noverify を必要とすることを示すフラグ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
profiles
アクティブにする Spring プロファイル。'spring.profiles.active' 引数を指定する便利なショートカット。コマンドラインでは、コンマを使用して複数のプロファイルを区切ります。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ |
|
開始 |
|
systemPropertyVariables
プロセスに渡す JVM システムプロパティのリスト。
名前 |
|
---|---|
タイプ |
|
デフォルト値 | |
ユーザープロパティ | |
開始 |
|
useTestClasspath
実行時にテストクラスパスを含めるフラグ。
名前 |
|
---|---|
タイプ |
|
デフォルト値 |
|
ユーザープロパティ |
|
開始 |
spring-boot:stop
org.springframework.boot:spring-boot-maven-plugin:3.3.5
「開始」ゴールによって開始されたアプリケーションを停止します。通常、テストスイートが完了すると呼び出されます。
オプションのパラメーター
名前 | タイプ | デフォルト |
---|---|---|
|
| |
|
| |
|
|
サンプル
統合テスト用のランダムポート
Spring Boot テスト統合の優れた機能の 1 つは、Web アプリケーションに空きポートを割り当てることができることです。プラグインの start
ゴールが使用されると、Spring Boot アプリケーションが個別に開始され、統合テスト自体に実際のポートを渡すことが難しくなります。
以下の例は、ビルドヘルパー Maven プラグイン (英語) を使用して同じ機能を実現する方法を示しています。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>reserve-tomcat-port</id>
<goals>
<goal>reserve-network-port</goal>
</goals>
<phase>process-resources</phase>
<configuration>
<portNames>
<portName>tomcat.http.port</portName>
</portNames>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
<configuration>
<arguments>
<argument>--server.port=${tomcat.http.port}</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<test.server.port>${tomcat.http.port}</test.server.port>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
統合テストのいずれかで test.server.port
システムプロパティを取得して、サーバーに対して適切な URL
を作成できるようになりました。
JMX ポートをカスタマイズする
jmxPort
プロパティにより、プラグインが Spring Boot アプリケーションとの通信に使用するポートをカスタマイズできます。
この例は、9001
がすでに使用されている場合にポートをカスタマイズする方法を示しています。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jmxPort>9009</jmxPort>
</configuration>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
JMX ポートを構成する必要がある場合は、上記のようにグローバル構成で構成して、両方のゴールで共有されるようにしてください。 |
統合テストをスキップ
skip
プロパティにより、Spring Boot maven プラグインの実行を完全にスキップできます。
この例は、コマンドラインプロパティを使用した統合テストをスキップし、repackage
ゴールが実行されることを確認する方法を示しています。
<project>
<properties>
<skip.it>false</skip.it>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>pre-integration-test</id>
<goals>
<goal>start</goal>
</goals>
<configuration>
<skip>${skip.it}</skip>
</configuration>
</execution>
<execution>
<id>post-integration-test</id>
<goals>
<goal>stop</goal>
</goals>
<configuration>
<skip>${skip.it}</skip>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<skip>${skip.it}</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
デフォルトでは、統合テストが実行されますが、このセットアップにより、次のようにコマンドラインで簡単に無効化できます。
$ mvn verify -Dskip.it=true