問題タブ [cdi-unit]

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 投票する
1 に答える
259 参照

java - Activiti CDI / Weld SE / CDIユニット

純粋な CDI を使用して Activiti / BPMN プロセスをテストしようとした人はいますか? 理論的には(何も見逃していなければ)f.exを使用できるはずだと思います。activiti-engine および activiti-cdi と共にプロセスをテストするためのcdi-unit 。CDIユニットは内部でweld-seを使用しています。

しかし、私はそれを機能させることができませんでした。その理由は、Activiti CDI と CDI ユニットが異なるコンテキストで動作するためだと思います。それらを「結合」する方法がわかりませんでした (または、おそらく不可能です)。

@RunWith(CdiRunner.class) で注釈が付けられたテストで ProcessEngine で @Inject を使用しても ( CDI ユニットのクイックスタートのように)、何も「トリガー」されませんでした。つまり、Activiti または ProcessEngine は変更されませんでした。

0 投票する
1 に答える
1255 参照

java - 期待される?CDI Request スコープ Bean がプロデューサーに注入され、依存する Bean に注入されると、WELD-001303: アクティブなコンテキストがありません

RequestScope がアクティブであると仮定します (cdi-unit の @InRequestScope を使用)

与えられた

  • そのアクティブなリクエストスコープへの製品の注入
  • 依存プロデューサーを使用する (InjectionPoint パラメーターを使用するため、依存する必要があります)
  • そのプロデューサーには、リクエストスコープのBeanを注入する必要があります

これが失敗した場合、リクエスト スコープ Bean の原因

  • これは CDI ごとに予想される動作ですか?
  • はいの場合、プロデューサーの依存疑似スコープのためですか?
  • SomeCache がリクエスト スコープではなくアプリケーション スコープである場合、これが失敗しないのはなぜですか?

SomeCache の妥当な範囲のソリューションは何ですか?

その (動作していない) リクエスト スコープの SomeCache は、プロデューサーが最初に注入される Bean を生成するために必要なデータをキャッシュします。だからできる

  • どちらにも依存しない (キャッシュが役に立たなくなるため)
  • また、アプリケーション スコープまたは静的であってはなりません (スコープが広すぎる)。

理想的には、Product が注入される Bean の同じスコープに自動的にある必要があります (例では、ExpectedTest です)。別のカスタム cdi スコープである可能性がありますが、そのスコープを定義するクライアント/ユーザー開発者に依存するべきではありません。意味があれば、それを「推移的なスコープ依存 Bean」と呼ぶことができます。

0 投票する
1 に答える
1394 参照

java - public private フィールドのパラドックスのため、Junit @Rule を使用した CdiUnit テストは不可能です

私の問題を再現するには、次のスニペットで十分です。

  • thrown属性を設定しpublicてエラーを取得するかorg.jboss.weld.exceptions.DefinitionException: WELD-000075: Normal scoped managed bean implementation class has a public field
  • publicまたは、修飾子を削除してエラーが発生しますorg.junit.internal.runners.rules.ValidationError: The @Rule 'thrown' must be public.
  • publicまた、修飾子を配置し@Dependentて、クラスに注釈スコープを追加しようとしましたが、エラーが発生しましたorg.jboss.weld.exceptions.DefinitionException: WELD-000046: At most one scope may be specified on [EnhancedAnnotatedTypeImpl] public @Dependent @ApplicationScoped @RunWith

不要なコードをすべて取り除きましたが、これは非常に複雑な単体テストであり、モック、CDI によるサービス インジェクション、および例外をスローすることが予想されるいくつかのテスト メソッドを使用しています。

したがって、私の問題は、一方でWeldはクラスをプロキシ化できないため、すべてのフィールドをパブリックにしないことを望んでおり、他方では、JUnitはリフレクションを使用してアクセスしているためRuleフィールドをパブリックにしたいということです。setAccessible(true)セキュリティ マネージャがアクティブな場合があるため、このメソッドを使用したくありません。そのパラドックスにどう対処するか?

注意:この回答に対するヒントコメントも見つかりました。

@Rule でメソッドにアノテーションを付けることもできるので、これにより問題を回避できます

しかし、メソッドに注釈を付けたjunitテストの例は見つかりませんでした@Rule。これについては別の質問をする予定です。