最初に EntityFramework コードを使用してコードをテストしようとしています。テスト可能にし、分離テストを可能にするために、DbContext
実装するインターフェースを作成しました。クラスをテストしているわけではありませんDbContext
。EF コードが期待どおりに動作すると仮定します。
ここで、次の方法を検討してください。
public IEnumerable<User> GetOddId()
{
return context_.Users.Where((u, i) => i % 2 == 1).AsEnumerable();
}
このメソッドは、(インメモリ LINQ プロバイダーを使用するため) 私のモックで合格しFakeDbSet
ますが、EF/LINQ to SQL ドライバーを使用すると例外で失敗します。
そのままにして、人々がそのようなクエリを書かないように十分に知っていることを望みますか? 分離テストをあきらめて、実際のデータベースでテストしますか?
DataMigrations (おそらく適切なシード) を使用した LocalDb は、実際のデータベースでのテストに役立ちますか?
答えを正当化してください。
TLDR: インメモリ LINQ と SQL LINQ の違いを考慮して、EntityFramework コードをテストする方法は?
ずっと後の編集:それ以来、私が必要としているものを正確に実行する非常に優れたフレームワークを見つけました。Effort を使用した単体テストに関するブログ記事を書きました。また、いくつかの単体テスト機能が約束されている今後の EF6 では、これらすべてが必要ない可能性があることに注意してください。