2010-12-08 4 views
2

C#環境での単体テストの重要性を理解し始めました。さて、私はどのように私は挿入、削除とデータベース上の更新を行い、その後、成功したテストの後にデータをクリーンアップブラックボックスユニットテストを実装するのだろうかと思っています。データベースのロールバックによるユニットテスト

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

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

+0

ここでは、「統合テスト」について説明しています。単体テストは、定義によって、データベースと通信しません。また、このSOの質問を見て:http://stackoverflow.com/questions/4374353/how-to-write-output-in-the-classinitialize-of-a-unit-test-class。 – Steven

答えて

5

開発サイクルでは何をしていますか?私たちはいつも私たちがアプリケーションを開発しているときに、そのユニットテストと負荷テストを心に持っています。だから、私たちはすべてのdatadaseのテーブルにuserIdなどで列を作成します。その後、負荷テストまたはユニットテストを実行すると、負荷テストデータであることを示すUserId -1がすべての列に挿入され、ユニットテストデータの場合には-2が挿入されます。しばらくしてデータを消去する予定のジョブをデータベースの前に定義しておく必要があります。

+0

うーん...あなたは私にここで良いアイデアを与えている。このIDを持つ列が検出されると、トリガーは変更をすぐにロールバックできます。 –

+6

マーティンはありません。トリガーは使用しないでください。パフォーマンスが低下します。 SQLジョブを使用して、必要なときに削除されるようにします。 – Singleton

+0

私は、あなたが良い点を参照してください参照してください。 –

0

1つのオプションは、実際のデータベースの代わりにMockデータベースを使用することです。ここにはそれを記述するlinkがあります。

+0

ありがとう、私はかなり長い間これを見てきました。しかし私は私の層の中でAOPをやることを余儀なくされます、私はまだこれ以外の利点はまだ見えません。 –

+0

私はあなたがそれらを同期させるために複製されたものと毎回変更をマージする必要があるので、頭がおかしくなると思います。 – Singleton

1

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

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

+0

基本的に、テーブルの最後のインデックスを復元するだけですか? –

+0

テーブル内のインデックスを復元するのはなぜですか?単体テストがインデックスと独立している場合は、問題はないはずです。 – dhinesh

3

あなたのテストが簡潔であれば、あなたのDALをテストするために、テストが完了したらロールバックされるトランザクションで挿入/更新/削除を行うだけではどうでしょうか?

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

+4

通常、テストが完了した直後にすべてのデータを削除して、アプリケーションが負荷テスト/ユニットで適切なデータを作成していることを確認するために、そのデータも分析したいと思っていますか? – Singleton

+1

ユニットテストデータの分析 - テスト自体は成功/失敗の結果を与えることによって行います。しかし、テストデータそのものの正当性を検証することに言及しているのであれば、「誰が後見人を守るか」というシナリオはありませんか? – InSane

+1

+1テストをシャットダウンではなく起動時に破棄させます。テストが失敗したときに手動チェックを行うことができれば便利です。 –

関連する問題