質問
- ASP.NET MVC4 Web アプリケーションを EntityFramework 5 でテストするにはどうすればよいですか?
- Moq のようなモック フレームワークを使用する必要がありますか?
序章
私はこのトピックについて何週間も研究してきました。私は多くの資料を見つけましたが、質問に完全に答えていると感じるものは何もありません. 多くの情報は何年も前のものであり、当てはまらない場合があります。
私の状況
既存の古いアプリケーションを再構築した MVC4 アプリケーションを構築しています。データベースが既に存在し (したがって、データベース ファーストのアプローチ)、大規模で複雑です。理想的には、メイン エンティティ オブジェクトと同一であるが、別の「モック」またはメモリ内データベースを使用する偽の「エンティティ」オブジェクトが必要です。これにより、一連の偽のデータを生成し、テストを実行して、フィードバックを受け取ります。例えば:
FakeEntities _db = new FakeEntities();
// test a controller action
ここのところ...
私がこれまでに理解したことから、統合テストを使用する必要があります。Ladislav Mrnka によるこの投稿によると、統合テストとは、コントローラーのアクションをテストすることを意味し、LINQ-to-entities および LINQ-to-objects の問題が少ないことを意味します。
リポジトリをモックする場合は、Linq-To-Objects を使用し、緑色のテストが表示されますが、Linq-To-Entities を使用してアプリケーションを実行すると、例外が発生します。
私は彼が何を意味するかを知っており、同意できます.Linq-To-Entitiesと実際の(または実際に近い)データベースを常に使用していることを確認したいと思います。
私はリポジトリ パターンについて多くのことを読んできましたが、linush によるこのブログは、私が試みているものにかなり近いようです。実際、汎用リポジトリの作成をテストし、メモリ内 ObjectSet に依存する Entity Framework と「モック」DbContext を正常に使用したダミー プロジェクトを既に作成しました。
このアプローチに関する私の問題は
- 上記のように、これは Linq-To-Entities の代わりに Linq-To-Objects を使用していることを意味します
- 私の Web アプリは、ストアド プロシージャの多用に依存します
答える前のまとめ
- MVC4、EF5、および SQL Server (ただし、データベースにとらわれないままにしたい)
- SQL ストアド プロシージャを使用するロジックをテストする機能
- Linq-To-エンティティ
- データベースファーストのアプローチ