1

JUnit を使用した EJB 3.0 コンポーネントの統合テストに関していくつか質問があります。

JUnit テストでは、セッション Bean リソース ローカル エンティティ マネージャーに注入して、ejb コンテナーを「シミュレート」できます。しかし、もし...

  1. ejb メソッドのトランザクション属性が適切に処理されているかどうかをテストする必要がある場合はどうすればよいでしょうか? これはコンテナの外で行うことができますか?そうでない場合、コンテナ内でテストする最も簡単な方法は何ですか?

  2. 各テストの前に、db にいくつかのテスト レコードがあることを確認する必要がある場合はどうすればよいでしょうか? テストの実行後 (失敗した場合でも) db からテスト データが消去されることをどのように保証しますか?

4

2 に答える 2

2

#553031で説明されているように、組み込み可能な JBoss を使用して EJB を単体テストすることもできます。

それはきれいな解決策ではありませんが、うまくいきます。

于 2009-02-25T12:02:55.770 に答える
0

Mavenを使用している場合、または使用していない場合でも、これは役立つ場合があります。トランザクションセマンティクスをテストする一般的な方法は、H2やHSQLDB(Hypersonic)などのインメモリデータベースを使用することです。つまり、実際には、非常に軽量なコンテナー内でテストしていることになります。HibernateはJPA実装として構成できます。完全にRAMで実行されている完全に機能するリレーショナルデータベースにデータを永続化します。

フィクスチャに関しては、かなりの数のオプションがあり、最も人気のあるものの1つはDbUnitですが、私の経験では、それらは価値があるよりも複雑です。必要なモデルオブジェクトを使用してテストを設定する独自の「ビルダー」クラスを作成することを好みます。構成「セッター」がビルダーのインスタンスを返すのが好きなので、次のように呼び出しを連鎖させることができます。

  this.emf = Persistence.createEntityManagerFactory ("hibernate-hsqldb");
  Widget widget = new WidgetBuilder(this.emf).setAnOption(4).setAnother("test").build();

通常、emfはsetUpメソッドで作成され、tearDownで閉じられます。これにより、テストの実行の間にデータベースが完全に初期化されます。

于 2009-02-25T01:22:38.477 に答える