8

私は単体テストを実装しようとしてきましたが、現在、次のことを行うコードがいくつかあります。

  1. 外部データベースのクエリ、フィード テーブルへの読み込み
  2. フィードとデータ テーブルのデルタであるビューをクエリし、フィード テーブルと一致するようにデータ テーブルを更新する

私の単体テスト戦略は次のとおりです。

自由に操作できるテスト データベースがあります。

  1. setUP() で、いくつかのデータをテスト用データベースにロードします
  2. テストデータベースをソースとして使用して、コードを実行します
  3. データテーブルを調べて、カウントと特定のレコードの存在/非存在をチェックします
  4. テストデータベースをクリアし、別のデータセットをロードします
  5. コードを再度実行する
  6. データテーブルを再度調べる

明らかに、特定のレコードを追加、削除、更新する必要があることがわかるように、ソースデータベースにロードするデータセットを設定しています。

これは少し面倒なようですが、もっと簡単な方法があるはずですか? 助言がありますか?

4

5 に答える 5

8

デルタを生成するビューをテストすること、またはビューに応じてコードが正しく追加、削除、および更新されることをテストすることがあなたの意図ですか?

ビューをテストしたい場合は、DBUnitなどのツールを使用して、手動で計算した差分を持つさまざまなデータをフィードとデータ テーブルに入力できます。次に、テストごとに、ビューが一致するセットを返すことを確認します。

ビューによって検出された差分にコードがどのように応答するかをテストしたい場合は、データベース アクセスを抽象化しようとします。結果セット (または POJO/DTO のリスト) を渡すことができる Java メソッドを想像し、追加するパラメータ オブジェクト配列 (再び、または POJO) のリストを返します。他の方法では、削除および更新するアイテムの差分リストを解析します。その後、モックの結果セットまたは pojo を作成してコードに渡し、正しいパラメーターが返されることを確認できます。データベースに触れることなくすべて。

重要なのは、プロセスを部分に分割し、それぞれを可能な限り個別にテストすることだと思います。

于 2008-09-06T15:11:11.647 に答える
6

DbUnitはあなたのニーズを満たします。注意すべきことの 1 つは、JCL の代わりにログ ファサードとして SLF4J を使用するように切り替えたことです。ログを JCL に転送するように SLF4J を構成できますが、Maven DbUnit を使用している場合はデフォルトで Nop ログ プロバイダーを吸い込むため、除外を使用する必要があることに注意してください

于 2008-09-06T15:08:26.677 に答える
1

Maven を使用している場合、1 つのオプションはsql-maven-pluginを使用することです。これにより、Maven ビルド サイクル中にデータベースの初期化/作成スクリプトを実行できます。

于 2008-10-14T07:07:17.213 に答える
1

すでに提案されている DBUnit とは別に、Unitilsを調べることができます。DBUnit を使用しますが、それ以上のものを提供します (サイトからの引用):

  • インクリメンタル、反復可能、および後処理スクリプトのサポートによる、データベースの自動メンテナンス
  • 制約を自動的に無効にし、シーケンスを最小値に設定します
  • Oracle、Hsqldb、MySql、DB2、Postgresql、MsSql、および Derby のサポート
  • テスト データベース接続のセットアップを簡素化する
  • DBUnit によるテスト データの簡単な挿入 * トランザクションでテストを実行
  • JPA エンティティ マネージャーの作成と hibernate、toplink、および * Hibernate SessionFactory の作成とセッションの挿入
  • JPAエンティティのマッピングを自動的にテストする/データベースでマッピングされたオブジェクトを休止状態にする
于 2008-10-31T08:07:09.717 に答える
1

私は DbUnit を使用していますが、DB に対してテストする必要がないように懸命に取り組んでいます。データベースに対するテストは、データベース インターフェイスをテストする目的でのみ存在する必要があります。したがって、残りのすべてのテストで使用するデータを設定できる Mock Db Connections があります。

于 2008-09-16T19:32:39.250 に答える