問題タブ [junit5-extension-model]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
763 参照

junit5 - 状態を維持する適切な方法を示す完全な JUnit 5 拡張機能の例はありますか (ガイドの WebServerExtension.java など)。

JUnit5 マニュアルのメインのWebServerExtensionの例は不完全であり、構成 (enableSecurity、サーバー URL など) を適切に保存する方法を完全には示していません。

https://github.com/junit-team/junit5/blob/master/documentation/src/main/java/example/registration/WebServerExtension.java

この例では、値を無視またはハードコードしています。マニュアル (セクション 5.11. 拡張機能での状態の維持) は、「ストア」を使用する必要があることを暗示していますが、オブジェクトの構築時に ExtensionContext はまだ利用できません。このデータをストアに移行する方法が明確ではありません。コンストラクターではまだ使用できません。

また、WebServerExtension のプログラム例で Store API を使用することがさらに望ましく、内部状態 (たとえば、this.serverUrl、this.enableSecurity など) を使用するだけで機能する可能性があることも明らかではありません。

ストアは、カスタム拡張機能の複数のインスタンスが (適切に) 存在する可能性があるこの「プログラムによる」スタイルを使用しない拡張機能により適しているのでしょうか? 言い換えれば、これがサポートされているパラダイムであるかどうかは、ガイドから明確ではありませんか?

オンラインの他の JUnit 5 拡張機能の例 (例: org.junit.jupiter.engine.extension.TempDirectory) は、アノテーションを活用してストアに構成情報を渡す方法を示していますが、WebServerExtension のような完全なプログラム ビルダー タイプの例もあるとよいでしょう。 .

TempDirectory のような例は明らかに beforeXXX() メソッドから ExtensionContext にアクセスできますが、WebServerExtension の例はそうではありません。

以下のアプローチを使用すると問題なく動作するように見えますが、これがサポートされているパラダイムであることを確認したかったのです (つまり、このプログラムによるアプローチを使用する場合は、ストアの代わりにフィールドを使用します)。

ありがとう!

0 投票する
0 に答える
392 参照

java - Qualifier Annotation に基づいて Bean をプログラムで Autowire する方法

Junit5 では、Extensions を使用すると、BeforeAll メソッドと AfterAll メソッドを実行できます。また、Annotations を使用してテストの動作を変更しようとしています。ただし、これらの注釈を @Qualifiers としても Bean の初期化に使用しており、テストで識別された注釈を使用して Bean を初期化できるようにしたいと考えています。

SpringExtensionJunit5 で取得できることがわかっている修飾子アノテーションを使用して、実行時にプログラムで Bean を初期化したい

これを使用して Bean 初期化ファクトリーを呼び出すことができますが、修飾子である注釈を使用して Bean を初期化する方法がわかりません。修飾子によって識別される同じタイプの複数の Bean があります。

私が立ち往生している問題は

現在、AutoWired を使用して Type of user credentials を静的に初期化してから、スイッチケースを使用して事前に初期化された UserCredential を使用している注釈に基づいています。

アイデアは、テスト クラス@ExtendsWith(ResetPortal.class)を用意し、リセット (テスト前のログイン) に使用できるユーザーのタイプを示すことです。Qualifier Annotations を使用してそれを示しています。これはExtensionContext、Junit5beforeAllメソッドから抽出できます。

さらに、UserCredentialユーザーのタイプごとに 1 つのクラスとそのクラスの複数の @Bean 定義があります。

コード

カスタム修飾子アノテーション User1Qualifier を使用した Bean 定義

私のカスタム修飾子は以下のとおりです(複数あります)

現在、テストでは、ResetPortal が取得する同じ注釈を使用しようとしています。

Junit5 がクラスを初期化し、そのマネージド インスタンスを呼び出すため、ResetPortal クラスは Autowired 要素を個別に定義する必要があります。