5

単体テストの目的で、これを行うことは可能ですか:

  • 何らかの形式 (XML?) のテスト データをソース管理にチェックインする
  • 単体テストが実行されると、このテスト データからある種のメモリ内データベースをインスタンス化します。
  • 単体テストの実行中に、このインメモリ データベースに対して EF を実行します。

?

単体テストで、特定の外部データベースが存在し、特定の状態にあることに依存することは望ましくありません。

また、コードとテストで 2 つの異なる "世界" を維持したくありません。EF が実際のデータベースに対して実行される現実の世界と、何らかの EF モックに対してテストが実行される偽の作業です。

4

1 に答える 1

6

単体テストは、データベースに依存してはなりません。データベースへの依存関係 (メモリ データベース内であっても) は、統合テストを行っていることを意味し、統合テストは、使用する実際のデータベースに対して実行する必要があります。

EF 用の XML データベースについては知りませんが、存在する場合でも、要件の前に戻ってきます。また、コードとテストで 2 つの異なる「世界」を維持したくありません。すべてのデータベースには、異なる会社によって作成された独自の EF プロバイダーがあります。MS SQL Server と MS SQL Server Compact Edition のプロバイダーでさえ、両者を切り替えるのが非常に困難なほどに異なります。

あなたがすべきこと:

  • いくつかの抽象化 (Linq からエンティティへのクエリを含むすべてを含む) の背後にあるすべての EF の使用を隠し、単体テスト用に EF の代わりにこの抽象化をモックします。
  • 抽象化自体をテストするために本番環境で使用する実際のデータベース実装に対して統合テストを使用します
于 2012-08-15T12:06:47.990 に答える