Quarkus アプリケーションのテスト
前書き リンクのコピーリンクがクリップボードにコピーされました!
アプリケーション開発者は、Red Hat ビルドの Quarkus を使用して、OpenShift 環境およびサーバーレス環境で実行される Java で書かれたマイクロサービスベースのアプリケーションを作成できます。ネイティブ実行可能ファイルにコンパイルされたアプリケーションは、メモリーのフットプリントが小さく、起動時間は高速です。
本ガイドでは、Apache Maven を使用して JVM モードで Quarkus Getting Started プロジェクトをテストする方法と、リソースをテストに注入する方法を説明します。『Quarkus スタートガイド』 で作成したテストを展開します。
前提条件
OpenJDK (JDK) 11 がインストールされ、
JAVA_HOME環境変数が Java SDK の場所を指定していること。- Red Hat ビルドの Open JDK は、Red Hat カスタマーポータルの Software Downloads ページから入手可能です (ログインが必要です)。
Apache Maven 3.6.3 以降がインストールされていること。
- Maven は Apache Maven Project の Web サイトからダウンロードできます。
Quarkus Getting Started プロジェクトを完了していること。
- Quarkus Getting Started プロジェクトのビルド方法は、『Quarkus スタートガイド』 を参照してください。
-
あるいは、Quarkus quickstart archive をダウンロードするか、
Quarkus QuickstartsGit リポジトリーをクローンしてください。この例はgetting-startedディレクトリーにあります。
多様性を受け入れるオープンソースの強化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、弊社 の 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ファイルにquarkus.http.test-portプロパティーを設定します。<port>は、テストするポートに置き換えます。quarkus.http.test-port=<port>
quarkus.http.test-port=<port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポート番号を
0に設定すると、オペレーティングシステムは、システムで利用可能なポートの範囲からランダムなポートを割り当てることができます。注記Quarkus は、テストの実行前に RestAssured が使用するデフォルトポートを更新する RestAssured インテグレーションを提供するため、追加の設定は必要ありません。
第3章 テストへの 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 コンポーネントです。
第4章 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 はテストに注入されます。
第5章 テストへのインターセプターの適用 リンクのコピーリンクがクリップボードにコピーされました!
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 以下の import ステートメントが
TransactionalQuarkusTest.javaに含まれることを確認してください。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 サービスを直接評価する簡単なテストです。
第6章 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
ExternalServiceが使用されている場所に、MockExternalServiceが注入されます。この例では、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
第7章 その他のリソース リンクのコピーリンクがクリップボードにコピーされました!
改訂日時: 2021-04-27 03:44:21 UTC