7

私の前の質問とは対照的に、私は私の要件を与えようとします.

以下に適合するフレームワーク/方法論/「もの」を見つけようとしています:

  • C# を使用して、できれば Visual Studio で作成された自動テストを作成する能力。
  • テストは Web ブラウザーを駆動し、ユーザーと同じように SUT と対話する必要があります。
  • テストでは、DB でテスト シナリオをセットアップできる必要があります。
  • テストでは、ユーザー インタラクションが DB で期待される効果を発揮したことを確認できる必要があります。
  • テストが完了すると、DB で行ったすべての変更をロールバックできるはずです。

私の最初の試みは、NUnit テストを使用して Selenium (およびその前に Watin) を駆動することでしたが、TransactionScope を使用して Selenium 駆動型ブラウザーが DB で行った変更をロールバックするときに、少し問題に直面しました (上記のリンクを確認してください)。

「現実の世界」でこのようなことをした人はいますか?Google で参考文献をいくつか見つけましたが、これを実装する方法に関する具体的な例を見つけることができませんでした。単体テストを行っていれば問題ありません。その場合、TransactionScope で十分です。

編集: R. Harvey がこの質問を指摘してくれましたが、これは私の状況とほぼ同じです。

ただし、その質問はほぼ同じです。私のアプリケーションは一連のサービスの一部であり、そのすべてが同じデータベース テーブルのセットにアクセスしています。必要なテスト データの量では、ドロップ/作成スクリプトを効率的に使用できません。これに対する代替ソリューションはありますか?

私たちは SQL Server 2005 を使用していますが、私はデータベース マジックにあまり精通していません。そのため、ドロップ/作成以外の SQL スクリプトを使用する方法があれば、それがオプションになる可能性があります。

編集2:

回答といくつかの追加のヘッド スクラッチに基づいて、開発者が単体テスト、統合テスト、および機能テストを実行するためのより軽量なデータベースを使用します。これにより、テストのセットアップと破棄に sql-scripts を使用できるようになります。

4

3 に答える 3

7

データベースを正常な状態に復元するために必要なデータの量がスクリプトのドロップ/作成を禁止し、SQL 2005のDeveloperまたはEnterpriseエディションでテストを実行している場合は、良好な状態のデータベーススナップショットの作成を検討できます。 、および各テストの前にそれに戻ります。これは完全な復元よりもかなり高速ですが、何百ものテストがある場合はまだ時間がかかりすぎる可能性があります。

于 2009-09-24T07:27:06.437 に答える
7

トランザクションで行われた変更は、そのトランザクション内でのみ表示されます。また、(可能であれば) トランザクション スコープでテストをラップすると、非常に重要な側面 (トランザクション) でテストが実際のものとは異なる動作をすることになります。

すべてのテスト スイートの前に復元するデータベース イメージを使用することをお勧めします。このようにして、スイートが完成し、検証が完了したら、テスト データベースを削除します。次の実行では、スイートのセットアップ時に、保存されたイメージからデータベースが再作成され、テストの準備ができた元の状態になります。データベースをゼロから展開するスクリプトを作成し、スイートのセットアップ中にそのスクリプトを実行するとさらに良いでしょう。

ところで、すべてのテストの前に元の状態に復元することは現実的ではありません。より一般的には、個々のテストのセットアップとクリーンアップの手順に時間がかかることは現実的ではありません。テストを追加すると、テスト間でデータベースをテスト可能な状態に復元するのにかかる時間が管理不能になります。何百ものテストを含むスイートは非常に一般的であり、何万ものテストを完全に実行すると、テストのためにデータベースを復元するだけで何時間もかかることになります。個々のテストを独立して実行できるように設計します。テスト N-1 が失敗した場合でも、テスト N は有効な結果を生成する必要があります。

考慮すべきもう 1 つのことは、失敗の調査です。失敗したテストを意味のある情報を調査できる状態のままデータベースに残し、その後のテストを実行して有効な結果を生成できるようにする必要があります。これらの要件は互いに矛盾する場合もありますが、それらを考慮してテストを設計する必要があります。

于 2009-09-24T06:12:27.103 に答える
0

この関連する質問で推奨したAmnesiaをお見逃しなく。

于 2011-12-06T19:40:56.020 に答える