6

テストデータをデータベース(SQL Server 2008)に配置する必要がある一連のWeb自動化テストを作成しています。各テストに必要なデータを生成するには、正しいデータをDBに挿入するC#コードを呼び出す必要があります(つまり、データを挿入するためのSQLスクリプトを作成することはできません)。私の問題は、これらの自動テストからの大量のテストデータでテストデータベースを汚染したくないということです。したがって、テスト中にDBに加えられたすべての変更をロールバックしたいと思います。

誰かがこれを達成するための賢明な方法を提案できますか?

4

6 に答える 6

5

簡単な方法は、テストを実行する前にデータベースのバックアップを作成し、最後に復元することです。

于 2010-11-28T16:26:25.170 に答える
4

これを行う 2 つの方法。

1 つは、テストをトランザクション内に囲み、それをロールバックすることです。もう 1 つは、クリーンアップ スクリプトをテスト完了コードの一部として使用することです (これは、トランザクションが機能しない一部の統合テストで行います)。

于 2010-11-28T16:28:49.957 に答える
2

テストのトランザクション スコープを制御できないときは、通常、毎回データベースを削除して最初から再作成します。

明らかに、これは、テストが裸のスキーマに対して実行できる場合 (または作成スクリプトに挿入されたハードコードされたルックアップ値を使用する場合) にのみ実現可能です。

大量のデータが事前に入力されたスナップショット データベースに対してテストするとき、以前にクリーンアップ スクリプトを使用したことがあります。たとえば、ベースライン スナップショットの最大 ID を超える各テーブルからすべてのレコードを削除します。

AdaTheDev が示唆するようにバックアップ/ロールバックを自動化しようとしたことはありませんが、潜在的に複雑な (そしてバグのある) クリーンアップ スクリプトを維持したくない場合は、おそらく最良の選択肢のように思えます (スナップショット データの複雑さ/頻度によって異なります)。スナップショットが変更される可能性があり、それに応じてクリーンアップを変更する必要があります)。

メモリ内のデータ ストアに対して Web テストを実行できるように、データ アクセスをモック アウトすることを検討しましたか? 次に、トランザクション スコープをロールバックできるデータ アクセス手順を内部でテストしますか?

于 2010-11-28T16:43:16.907 に答える
2

Red Gate のウィザードは、SQL Virtual Restore をリリースしました。これは、実際にバックアップ ファイルをライブで読み取り、書き込み可能なデータベースとしてマウントするため、テスト前のシステムのベースライン状態を表すバックアップ ファイルを作成し、このバックアップを作成したら、コピーをテスト データベースとしてマウントし、テストを実行してから、コピーをアンマウントしてワイプします。

Virtual Restore はhttp://www.red-gate.com/products/sql_virtual_restore/index.htmにあり、試してみたい場合は 14 日間の試用版があります。

私は Red Gate とは何の関係もありません。ところで、私は Red Gate のツールの熱心なユーザーです。

于 2010-11-28T17:08:19.367 に答える
1

1 回のテストで複数の Web リクエストを行うことになるため、トランザクションを使用するのは難しいように思えますが、バックアップからデータベースを復元するよりも高速であるため、トランザクションを最初に使用することをお勧めします。

適切なバージョンの SQL サーバーを使用している場合は、バックアップの代わりにデータベース スナップショットを使用できます: http://msdn.microsoft.com/en-us/library/ms175876.aspx、単純に高速であるため:)

于 2010-11-28T17:00:06.353 に答える
0

明らかに、それはすべてテストの呼び出し方法に依存しますが、MbUnit にある「Rollback」属性は機能しますか?

于 2010-11-28T17:14:39.630 に答える