1

データベースにアクセスする遅れた ASP.Net コードがあります。sqlcommands を形成し、データベース上で実行するデータ アクセス層があります。

データ アクセス層を単体テストする最良の方法は何ですか? 実際にデータベースに接続してテスト ケースを実行するか、単に偽物を使用する必要がありますか?

シムを使用するのは良い考えですか (以下の投稿で説明)?

http://msdn.microsoft.com/en-us/library/hh549176.aspx

4

2 に答える 2

2

レガシーDLLが管理されていると仮定すると、VS2012で偽の機能を使用できるはずです。偽物は本当にこれを行うためのものです。偽物の一般的な使用法は次のように機能します。

  1. 新しい単体テストプロジェクトを作成する
  2. このレガシーDLL(Legacy.DLLなど)への参照を追加します。この単体テストプロジェクトで、依存するすべてのDLLが参照されていることを確認してください。
  3. ソリューション参照フォルダのLegacy.DLLを右クリックし、[偽のアセンブリを追加]を選択します。これにより、Legacy.DLLで定義されたタイプのシムが生成されます。
  4. また、プロジェクトコードへの参照を追加します(製品メソッドを単体テストする場合)
  5. TestMethod1では、Legacy.DLLで定義されているシミングメソッドを開始し、製品コードをテストできます。

http://msdn.microsoft.com/en-us/library/hh708916.aspxでも役立つ情報を見つけることができます。

于 2012-10-10T00:12:39.830 に答える
2

データ アクセス層をテストする最善の方法は、実際にデータベースに接続する統合テストを作成することです。偽物を使用することはお勧めできません (Microsoft Fakes であれ、他のテスト分離フレームワークであれ)。これを行うと、データ アクセス レイヤーのクエリ ロジックを検証できなくなります。そのため、最初にテストする必要があります。

共有メモリ プロトコルを介してローカル SQL データベースにヒットする詳細な統合テストを使用すると、1 分間に数百のテストを簡単に実行できます。ただし、各テストは、信頼性の高いテスト実行を可能にするために、独自のテスト環境 (つまり、アクセスするテーブル内のテスト レコード) を作成し、それをクリーンアップする必要があります。データ アクセス レイヤーが明示的にトランザクションを管理しない場合は、まず TransactionScope を使用して、各テストの最後にすべての変更を自動的にロールバックします。これは最も簡単で最適なオプションですが、それが機能しない場合 (レガシー コードがトランザクションを内部で管理している場合)、各テストの開始時に以前のテストで残されたデータを削除してみてください。または、すべてのテストのすべてのレコードに対して常に新しい一意の主キーを使用することで、テストが互いに影響を与えないようにすることができます。

于 2012-10-19T21:13:39.497 に答える