2024年11月14日 Lukas Hanusovsky 著
現在のテストスイートを置き換えるというアイデアは、数年前から検討されていました。当初は、現在のテストの記述方法に対するアプローチのリファクタリングのみを目的としていましたが、数回の内部議論とリファクタリングの更新を経て、新しいフレームワークに基づいた新しいテストスイートの方がより良い解決策になることがわかりました。
現在のテストスイートを使用する際に際立ついくつかの欠点について言及することは有益でしょう。まず第一に、Arquillian frameworkの上に構築された様々な構成と追加機能の複雑さです。これらの変更により、テストスイートは強力になりましたが、適切なドキュメントがないと初心者にはほとんど理解不能であるという欠点があります。2つ目の重要な点は、Arquillian frameworkがもはや完全にサポートされていないことです。他に言及すべき点としては、テスト対象を正確に指定したい場合に使用する複雑な実行システム、共有構成を持つ抽象クラス、カスタム拡張機能を追加するオプションがないことなどがあります。
Keycloakチームは、2024年5月に新しいテストフレームワークを設計する取り組みを開始しました。まず、私たちのアイデアが実現可能かどうかを検証するためのプロトタイプから始まりました。プロトタイプは、JUnit5 テストフレームワークに基づいたJUnit5拡張機能であり、具体的には、デフォルトのテストライフサイクル機能を拡張し、@KeycloakIntegrationTest、@InjectWebDriver、@InjectRealmなどのカスタムインジェクトアノテーションを提供するJUnit5コールバッククラスを実装するためのものです。
成功したテストラウンドの後、複数のサーバーモード、異なるデータベースとWebDriver、クライアントとユーザーのセットアップ、SmallRye構成のサポート、Nimbus SDKに基づくOAuthClient(この機能はプレビューのみです)などをサポートするために機能リストを拡張する概念実証に進みました。現在実装されている機能の完全なリストは次のとおりです。
すでにメインブランチとKeycloakナイトリービルドに存在しています。
拡張機能開発者向けには、カスタムプロバイダーでKeycloakを起動する方法の例を参照することをお勧めします:プロバイダーの例、pom.xmlテスト依存関係、テストの例。
バグを見つけた場合、何か議論したい場合、または新しい機能拡張を提案したい場合は、こちらのGitHubフィードバックディスカッションリンクに従ってください。
新しいテストフレームワークには、古いテストスイートからいくつかのテストを移行するのに十分な機能がすでに備わっています。実際、最初のテストの移行はすでに完了しています。古いテストスイートから、まずadmin
テスト、次にforms
およびoauth
パッケージへと、一度に1つのパッケージを移行する予定です。これを行うにあたり、テストフレームワークの機能を拡張していきます。
近日中に提供される予定の機能には、以下が含まれます。
最初にプロバイダーのMavenビルドを必要とせずに、カスタムプロバイダーをより簡単にデプロイする方法
改善されたロギング。テストとKeycloakの両方からロギングを簡単に構成できるようにする
モックアプリケーションを含む、OAuthおよびOpenID Connectの簡単なテスト
リモートインターフェースのみを介したテストが容易でない場合に、テスト対象のサーバー上でコードを実行できるようにする拡張機能
また、長期的な計画として、以下を提供する予定です。
プロバイダーを直接呼び出すことでプロバイダーを簡単にテストするために使用できるプロバイダーテスト
テスト実行時間を短縮するために、複数のコアを最大限に活用するテストの並列実行
コンセプト実証をまとめ、実現してくれたすべての人々、Miquel、Simon、Filip、Moises、Jon、そしてPedroに感謝します。プロジェクトを別のレベルに引き上げた非常に気の利いた提案をしてくれた技術設計を主導したStianに特別な感謝を申し上げます。
フィードバックをお寄せいただきありがとうございます。
お楽しみください!