1

Web モジュール、EJB モジュール、およびいくつかのユーティリティ jar を含む複雑な Java EE 6 アプリがあります。

Junit との統合テストを行いたいと考えています。したがって、openwebbeans cdi コンテナーを使用します (Struberg 氏http://struberg.wordpress.com/2012/03/17/controlling-cdi-containers-in-se-and-ee/に感謝します) 完璧に動作します。Junit テストで完全な cdi コンテナーを開始できます。

私の問題は、アプリケーションに Junit テスト (MQ-、persistence-、および transaction-interceptors) で実行できないいくつかのインターセプターがあることです。したがって、これらのインターセプターの実装をモックしたいと思います。

誰もこれを行う方法を知っていますか?

4

4 に答える 4

1

ご担当者様 ;-)

最後に、クリーンな Java EE テクニックで問題を解決しました。ProcessAnnotatedType イベントを監視するメソッドを提供しました。このメソッドは処理される型を評価し、それがインターセプターの 1 つである場合は、処理を拒否します。

public void processAnnotatedType(@Observes final ProcessAnnotatedType<?> event, final BeanManager manager) {
    if (event.getAnnotatedType().getJavaClass().equals(PrivilegeCheckingInterceptor.class)) {
        event.veto();
    }       
}
于 2012-11-26T07:34:28.500 に答える
0

「拒否」の別のオプションは、Deltaspike @Excludeアノテーションを使用することです。ProjectStageに基づいて Bean を拒否できます。

例:

@Exclude(ifProjectStage = ProjectStage.UnitTest.class)
public class MyInterceptor {
}

次に、テストで、Deltapikeテスト コントロール モジュールを使用してプロジェクト ステージをアクティブ化できます。例:

@RunWith(CdiTestRunner.class)
@TestControl(projectStage = UnitTest.class)
public class TestStageControl {

@Test...

} 
于 2015-07-28T17:49:00.170 に答える
0

Arquillian を使用して選択したコンテナーでテストしてみませんか? 頭に浮かぶ他のオプションは、モック機能を備えたインターセプターを追加し、CDI コンテナーを開始するときに実際のインターセプターの実装を除外することです。

于 2012-08-06T18:09:36.210 に答える
0

組み込みの OpenEJB を使用してテストを実行することもできます。

このリンクhttp://openejb.apache.org/examples-trunk/interceptors/が役立つ場合があります-おそらく「openejb.deployments.classpath.exclude」のプロパティを設定すると役立つ場合があります。

于 2012-10-21T12:32:15.127 に答える