Quarkus がテストプロファイルをサポート

Red Hat で Solution Architect として Quarkus を担当している伊藤ちひろ(@chiroito)です。

この記事は、Quarkus.io のブログ記事、Quarkus now supports test profiles の翻訳記事です。

Quarkus 1.6のリリースにより、Quarkusはテストプロファイルをサポートするようになりました。これにより、同じモジュール内で複数の異なる設定を簡単にテストすることができます。この記事では、テストプロファイルとは何か、その使用方法の概要を説明します。

@QuarkusTest がどのように動作するのかを復習

テストプロファイルについて説明する前に、@QuarkusTest注釈付きテストが実際にどのように動作するかについて簡単に説明します。これらのテストを初めて実行すると、Quarkusテスト拡張機能がQuarkusを起動します。その後、Quarkusはテストの実行中ずっと実行されたままになります。これにより、Quarkusは一度だけ起動されるので、テストが非常に速くなります。しかし、別の設定でQuarkusを再起動することができないため、モジュールごとに1つの設定をテストすることに制限がかかります。テストプロファイルを使用すると、この制限が緩和されます。

テストプロファイル

テストプロファイルは io.quarkus.test.junit.QuarkusTestProfile インターフェースによって定義されます。プロファイルを定義するには、このインターフェースの実装を提供する必要があります。このインターフェイスは以下のようになります。

/**
 * テストプロファイルを定義します。
 * テストプロファイルの下で実行されるテストは、他のテストとは異なる設定オプションを持ちます。
 *
 */
public interface QuarkusTestProfile {

    /**
     * テストに適用する追加の設定を返します。
     * これは、既存の設定 (application.properties を含む) を上書きします。
     * しかしながら、既存の設定はこれに統合されます。
     * (つまり、特定の設定キーがオーバーライドされていない限り、
     * application.propertiesの設定は有効になります)。
     */
    default Map<String, String> getConfigOverrides() {
        return Collections.emptyMap();
    }

    /**
     * 有効な代替案を返します。
     *
     * これは 'quarkus.arc.selected-alternatives' 設定キーを設定するのと同じ効果があります。
     * しかし、それがより便利になるかもしれません。
     */
    default Set<Class<?>> getEnabledAlternatives() {
        return Collections.emptySet();
    }

    /**
     * デフォルトの設定プロファイルを上書きできるようにします。
     * これは基本的にはテストを実行する前に quarkus.test.profile システムプロパティを設定するだけです。
     *
     */
    default String getConfigProfile() {
        return null;
    }
}

基本的に、このインターフェイスでは3つのことができます。

  • Quarkusを別の設定で実行するための設定のオーバーライドを提供することです。これらはオーバーライドなので、明示的にオーバーライドされていない限り、既存の設定が存在することに注意してください。

  • このプロファイルで有効にしたい CDI @Alternatve Bean を指定します。これにより、アプリケーション内の Bean をテスト専用のものに置き換えることができ、本質的にはモックアウトすることができます。

  • デフォルトの test プロファイルではなく、別の設定プロファイルで実行します。

このプロファイルを実際に使用するには、以下のように @TestProfile アノテーションを使って指定します。

@QuarkusTest
@TestProfile(MyProfile.class)
public class MyTestClass {
...
}

このテストクラスは MyProfile クラスで指定された設定で実行されます。

どのように動くのか

@QuarkusTest が実行される前に、Quarkusテスト拡張機能は、テストが使用したいプロファイルをチェックします。これは、前回のテストで使用されたプロファイルと比較します。それらが同じであれば、何も実行されません。現在実行中のQuarkusアプリケーションがすでに正しいプロファイルを使用していることを示しています。異なる場合は、Quarkusが停止され、新しい設定で開始されます。

一般的には、可能な限り高速でテストを実行するためには、Quarkusをできるだけ少ない回数で停止して起動するのがベストです。そのためには、テストをアルファベット順に実行し、特定のプロファイルを必要とするすべてのテストを独自のパッケージに設定することをお勧めします。これにより、同じプロファイルを持つすべてのテストが一緒に実行されるため、Quarkusの再起動回数を最小限に抑えることができます。

前へ…​

これらのプロファイルには、時間の経過とともに追加機能が追加されます。(1.7 ではプロファイルごとのカスタムテストリソースのサポートが含まれます)。他にも何かサポートしてほしいことがあったり、その他のフィードバックがあれば、私たちに知らせてください。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。