2

ac#環境でのユニットテストの重要性を理解し始めたところです。ここで、データベースの挿入、削除、更新を行うブラックボックス単体テストを実装し、テストが成功した後にデータをクリーンアップするにはどうすればよいのでしょうか。

挿入/更新/削除されたデータをロールバックするプロセスを実際にどのように実行しますか?単にインデックスをリセットして、挿入された行を削除しますか?または、スクリプトを作成してテーブルの元の状態を復元しますか?

私を案内してください、私はそれを感謝します。ありがとう!

4

5 に答える 5

5

開発サイクルでここで行うこと。アプリケーションを開発するときは常に、単体テストと負荷テストを念頭に置いています。したがって、userIdなどを使用してすべてのdatadaseのテーブルに列を作成します。次に、負荷テストまたは単体テストを実行するときに、すべての列にUserId -1を挿入し、負荷テストデータであることを示し、単体テストデータの場合は-2を指定します。次に、データベースの最後に事前定義ジョブがあり、しばらくするとそのデータがクリーンアップされます。

于 2010-12-08T05:51:10.120 に答える
3

テストが簡潔であり、DALをテストするためには、テストの完了後にロールバックされるトランザクションで挿入/更新/削除を実行する必要があると思います。

もう1つのオプションは、テストクリーンアップメソッドで特定の更新/削除スクリプトを使用して、更新/挿入した正確な変更をテスト前の値にロールバックすることです。

于 2010-12-08T05:56:24.757 に答える
1

CleanUpメソッドで行を削除するのは良い選択だと思います。

これにより、削除する行のコードを常にテストすることになります。

于 2010-12-08T05:42:53.830 に答える
0

1つのオプションは、実際のデータベースの代わりにモックデータベースを使用することです。これを説明するリンクは次のとおりです。

于 2010-12-08T05:41:13.110 に答える
0

私は最近調査をしていて、このスレッドも見つけました。これが私の発見であり、将来の読者に役立つかもしれません。

  • 変更したデータの復元をテストに任せます。コマンドを元に戻すようなものです。テストは通常​​、どのようなデータ変更が予想されるかを知っているため、理論的にはそれらを元に戻すことができます。自動化されていない限り、これには確かに追加の作業が必要であり、ノイズが発生する可能性があります。たとえば、テストで作成/更新されたデータを何らかの方法で一般的に追跡しようとする場合があります。
  • 各テストをトランザクションでラップし、後で元に戻します。上記のものとほとんど同じですが、TransactionScopeなどを使用すると実装が簡単になります。トランザクションは一般に構成できないため、アプリが独自のトランザクションを作成する場合や、アプリがTransactionScopeで動作しない場合(たとえば、Entity Frameworkに問題がある場合)は適切でない可能性があります。
  • テストのみに関連するデータについて、スマートな方法でアサートします。そうすれば、データが多すぎない限り、何もクリーンアップする必要はありません。たとえば、アプリにテストを認識させ、すべてのテーブルに追加されたテスト専用の列に特定の値を設定することができます。私は実際にそれを試したことがありません。
  • テストごとに新しいデータベースを最初から作成して初期化します。
  • データベースのバックアップを使用して、データベースを必要な場所に復元します。
  • 復元にはデータベーススナップショットを使用します。
  • スクリプトを実行してすべてのデータを削除し、再度挿入します。

私は個人的に後者を使用し、最終的にはReseedライブラリを実装しました。これは私のためにすべての作業を行います。

テストフレームワークでは通常、各テスト/テストフィクスチャの実行の前後にいくつかのロジックを実行できます。これは、上記のアイデアに必要になる可能性があります。たとえば、NUnitの場合、これはOneTimeSetUp 、、、、、、属性を使用して実装さます。OneTimeTearDownFixtureSetUpFixtureTearDownSetUpTearDown

于 2021-11-09T20:19:28.417 に答える