Quarkus アプリケーションのテスト
ガイド
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
アプリケーション開発者は、Red Hat ビルドの Quarkus を使用して、OpenShift 環境およびサーバーレス環境で実行される Java で書かれたマイクロサービスベースのアプリケーションを作成できます。ネイティブ実行可能ファイルにコンパイルされたアプリケーションは、メモリーのフットプリントが小さく、起動時間は高速です。
本ガイドでは、Apache Maven を使用して JVM モードで Quarkus Getting Started プロジェクトをテストする方法と、リソースをテストにインジェクトする方法を説明します。Quarkus スタートガイド で作成したテストを展開します。
このチュートリアルで使用する Quarkus Maven プロジェクトを Quarkus quickstart archive からダウンロードしたり、Quarkus Quickstarts Git リポジトリーをクローンしたりすることもできます。この演習は getting-started-testing ディレクトリーにあります。
前提条件
OpenJDK (JDK) 11 がインストールされ、
JAVA_HOME環境変数が Java SDK の場所を指定している。- Red Hat ビルドの Open JDK は、Red Hat カスタマーポータルの Software Downloads ページからダウンロードできます (ログインが必要です)。
Apache Maven 3.6.2 以降がインストールされていること。
- Maven は Apache Maven Project の Web サイトからダウンロードできます。
Quarkus Getting Started プロジェクトを完了していること。
- Quarkus Getting Started プロジェクトのビルド方法は、Quarkus スタートガイド を参照してください。
-
あるいは、Quarkus quickstart archive をダウンロードするか、
Quarkus QuickstartsGit リポジトリーをクローンしてください。この例はgetting-startedディレクトリーにあります。
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
弊社の技術的な内容についてのフィードバックに感謝します。ご意見をお聞かせください。コメントの追加、Insights の提供、誤字の修正、および質問を行う必要がある場合は、ドキュメントで直接行うこともできます。
Red Hat アカウントがあり、カスタマーポータルにログインしている必要があります。
カスタマーポータルからドキュメントのフィードバックを送信するには、以下の手順を実施します。
- Multi-page HTML 形式を選択します。
- ドキュメントの右上にある Feedback ボタンをクリックします。
- フィードバックを提供するテキストのセクションを強調表示します。
- ハイライトされたテキストの横にある Add Feedback ダイアログをクリックします。
- ページの右側のテキストボックスにフィードバックを入力し、送信 をクリックします。
フィードバックを送信すると、自動的に問題の追跡が作成されます。Submit をクリックすると表示されるリンクを開き、問題の監視を開始するか、さらにコメントを追加します。
貴重なフィードバックにご協力いただきありがとうございます。
多様性を受け入れるオープンソースの強化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
第1章 テスト依存関係の確認 リンクのコピーリンクがクリップボードにコピーされました!
このチュートリアルでは、Quarkus Getting Started プロジェクトが完了済みで、プロジェクト pom.xml ファイルに quarkus-junit5 および rest-assured 依存関係が含まれている必要があります。Quarkus Getting Started の演習を完了した場合、または完了済みのサンプルをダウンロードした場合に、これらの依存関係が表示されます。
-
quarkus-junit5依存関係は、テストフレームワークを制御する@QuarkusTestアノテーションを提供するため、テストに必要です。 rest-assured依存関係は必要ありませんが、HTTP エンドポイントをテストするための便利な方法として使用できます。注記Quarkus は正しい URL を自動的に設定するインテグレーションを提供するため、設定は必要ありません。
手順
-
Getting Started プロジェクトの
pom.xmlファイルを開きます。 以下の依存関係がファイルに含まれていることを確認し、必要な場合は追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pom.xmlファイルにmaven-surefire-pluginが含まれることを確認します。このチュートリアルでは JUnit 5 フレームワークを使用することから、maven-surefire-pluginのバージョンを設定する必要があります (デフォルトのバージョンでは JUnit 5 に対応していないため)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
テスト用に適切なログマネージャーを使用するように、
java.util.logging.managerシステムプロパティーを設定します。 GreetingResourceTest.javaファイルに以下の内容が含まれていることを確認し、必要な場合は追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow テストを実行するには、以下のコマンドを入力します。
./mvnw clean verify
./mvnw clean verifyCopy to Clipboard Copied! Toggle word wrap Toggle overflow IDE から直接テストを実行することもできます。
このテストでは、HTTP を使用して REST エンドポイントを直接テストします。テストがトリガーされると、テストの実行前にアプリケーションが起動します。
第2章 テストポートの指定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Quarkus テストはポート 8081 で実行され、実行中のアプリケーションとの競合が発生しないようにします。これにより、アプリケーションを並行して実行中にテストを実行できます。application.properties ファイルで、テスト接続に別のポートを指定できます。別のポートを使用して、セキュアでない HTTP 接続と SSL でセキュア化された接続をテストできます。
手順
application.propertiesファイルでquarkus.http.test-portプロパティーおよびquarkus.http.test-ssl-portプロパティーを設定します。<port>を、テスト接続に使用するポートの数に置き換えます。quarkus.http.test-port=<port> quarkus.http.test-ssl-port=<port>
quarkus.http.test-port=<port> quarkus.http.test-ssl-port=<port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポート番号を
0に設定すると、オペレーティングシステムは、システムで利用可能なポートの範囲からランダムなポートを割り当てることができます。注記Quarkus は、テストの実行前に Rest Assured が使用するデフォルトポートを更新する Rest Assured インテグレーションを提供するため、追加の設定は必要ありません。
第3章 HTTP テスト接続のレスポンスタイムアウトの期間の設定 リンクのコピーリンクがクリップボードにコピーされました!
REST Assured を使用してアプリケーションの REST API をテストする場合、デフォルトの接続およびレスポンスタイムアウトの期間は 30 秒に設定されます。アプリケーションのタイムアウト期間の長さを変更することができます。
手順
-
アプリケーションプロジェクトで
application.propertiesファイルを開きます。 quarkus.http.test-timeoutプロパティーの値をタイムアウト期間として設定したい期間の長さに設定し、続いてその期間の時間の単位を設定します。application.properties
quarkus.http.test-timeout=<duration>
quarkus.http.test-timeout=<duration>Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、レスポンスタイムアウトの期間の長さを 10 秒に設定するには、以下を実行します。
application.properties
quarkus.http.test-timeout=10s
quarkus.http.test-timeout=10sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 テストへの URL の注入 リンクのコピーリンクがクリップボードにコピーされました!
別のクライアントを使用する場合は、Quarkus @TestHTTPResource アノテーションを使用して、テスト予定のアプリケーションの URL を test クラスのフィールドに直接注入します。このフィールドには、タイプ String、URL、または URI を使用できます。このアノテーションにテストパスを指定することもできます。この演習では、静的リソースをロードする簡単なテストを作成します。
手順
以下の内容を含む
src/main/resources/META-INF/resources/index.htmlファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の内容で
StaticContentTest.javaファイルを作成し、index.htmlに適切なサービスが提供されていることをテストします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
@TestHTTPResourceアノテーションを使用すると、Quarkus インスタンスの URL を直接注入できます。アノテーションの値は URL の path コンポーネントです。
第5章 CDI Bean のテストへの注入 リンクのコピーリンクがクリップボードにコピーされました!
ユニットテストを実行し、CDI Bean を直接テストできます。Quarkus により、@Inject アノテーションを使用して CDI Bean をテストに注入できます。実際、Quarkus のテストでは完全な CDI Bean であるため、完全な CDI 機能を使用できます。
ネイティブテストで注入を使用することはできません。
手順
次の内容で
GreetingServiceTest.javaファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
GreetingServiceBean はテストに注入されます。
第6章 テストへのインターセプターの適用 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus テストは完全な CDI Bean であるため、通常通りに CDI インターセプターを適用できます。たとえば、トランザクションのコンテキスト内であるテスト方法を実行する場合は、@Transactional アノテーションをその方法に適用できます。また、独自のテストステレオタイプを作成することもできます。
手順
quarkus-narayana-jta依存関係をpom.xmlファイルに追加します。<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-narayana-jta</artifactId> </dependency><dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-narayana-jta</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow TransactionalQuarkusTest.javaに、以下の import ステートメントが含まれていることを確認してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow @TransactionalQuarkusTestアノテーションを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このアノテーションを、
@QuarkusTestアノテーションおよび@Transactionalアノテーションの両方を適用したかのように動作するテストクラスに適用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、HTTP を使用せずに greeting サービスを直接評価する簡単なテストです。
第7章 CDI Bean のモック化 リンクのコピーリンクがクリップボードにコピーされました!
Quarkus により、特定のテスト用に一部の CDI Bean をモック化できます。
以下の方法の 1 つを使用して、オブジェクトをモック化できます。
-
src/test/javaディレクトリーのクラスでモック化する Bean を上書きし、@Alternativeおよび@Priority(1)のアノテーションを Bean に配置します。 -
io.quarkus.test.Mockステレオタイプアノテーションを使用します。@Mockアノテーションには、@Alternative、@Priority(1)、および@Dependentアノテーションが含まれます。
以下の手順では、@Alternative アノテーションを使用して外部サービスをモック化する方法を説明します。ネイティブイメージには代替のテストが含まれていないため、この方法はネイティブイメージテストでは機能しない点に留意してください。
手順
次の例のように、
src/main/javaディレクトリーにExternalServiceを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow src/main/javaディレクトリーでExternalServiceを使用するクラスUsesExternalServiceを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例に示すような
src/test/javaディレクトリーにテストを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow @Alternativeアノテーションを使用するsrc/test/javaにMockExternalServiceを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
MockExternalServiceは、ExternalServiceが使用されている場所に注入されます。この例では、MockExternalServiceがUsesExternalServiceで使用されます。
注記@Alternative、@Priority(1)、および@Dependentアノテーションの代わりに@Mockアノテーションを使用できます。以下の例は、
@Mockアノテーションを使用するMockExternalServiceクラスを作成する方法を示しています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow テストで、アサートされた文字列を
"external"から"mock"に変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第8章 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
改訂日時:2023-01-28 19:59:34 +1000