質問: 現在、実際のデータベースを必要としないように、コンテキストメソッドのテストをリファクタリングしています。 Ef Coreを使用しています。 そこで、Microsoftのドキュメントを読み、コンテキストメソッドをテストする方法を読みました。私は最初にEF6テストのドキュメントを見つけ、その後EfCoreのドキュメントを読みました。 ここにリンクがあります: * Efコアテスト * Ef 6テスト 興味深いのは、EF6とEF Coreには異なるベストプラクティスがあることです。 EF6については、Moqでモッキングコンテキストを使用するか、独自のテストダブルを作成することをお勧めします。したがって、どちらの場合もコンテキストを模倣しています。 EF Coreについては、Sqliteまたは組み込みのInMemoryデータベースを使用することをお勧めします。 Moqでコンテキストをモックすることは、私にはかなり合理的に思えます。メソッドの機能をテストしたいだけです。とにかく後で統合テストをしなければなりません。 EF Coreの推奨方法ではなくなったのはなぜですか?そしてより一般的には、さまざまな方法の利点または問題は何ですか?
回答: 同じ記事からの次の引用を詳しく見てください... > SQLiteインメモリモードでは、リレーショナルデータベースのように動作するプロバイダーに対して効率的なテストを作成できます。 > > これにより、一定で変化しないテストデータだけでなく、リレーショナルデータベースの問題や動作も提供されます。それは実際の実際のシナリオに非常に近いものです。 一方、モックは、他のモデルとの関係を変更できる実装を提供するため、はるかに用途が広がります。 EFはdb用であり、EFのテストを行っているので、最初のオプションを使用することは完全に理にかなっています。多くの場合、遺伝子リポジトリなどの簡単な操作をテストする必要さえありません より高いレベル(リポジトリなどを使用するクラス)でテストするときは、具体的な実装とのカップリングがなく、カップリングを持たないインターフェースをモックしたいので、モックを使用するようにしてください。