ObjectContextまたはObjectQueryをモックする方法 Entity Frameworkで

.net-3.5 entity-framework mocking unit-testing

質問

Entity FrameworkでObjectContextまたはObjectQueryをモックする方法

人気のある回答

基本モックフレームワークは、インタフェースと抽象クラスのモックしか作成できません(ただし抽象/仮想メソッドのみ)。

ObjectContextは抽象でもインタフェースでもないので、それを偽造するのはそれほど簡単ではありません。ただし、具象モデルコンテナは部分クラスとして生成されるため(デザイナを使用している場合)、必要なメソッドやプロパティをそこからインタフェースに抽出できます。あなたのコードでは、あとでモックすることができるインターフェースだけを使うことができます。

ObjectQueryを使用すると、通常必要な(およびLINQに必要な)すべての必要な操作が基本的に含まれている基本インターフェース(例:IQueryable)があるため、もう少し簡単です。そのため、ビジネスロジックでObjectQueryの代わりにIQueryableを公開する必要があります。そして、そのインターフェイス用のモックを作成できます。

他の方法としては、すべてのデータアクセス関連のロジックを(最小限のロジックで)別のレイヤーに隠し、統合テストでこのレイヤーをテストし、他のレイヤーをユニットテストできるようにモックすることです。

モックを生成するために.NETのプロファイリングフックを使用するツール(私はTypeMockしか知らない)があります。これらのツールは、モックインターフェイスや抽象クラスに限定されていませんが、非仮想メソッドや静的メソッドを含め、基本的に何でもモックできます。このようなツールを使用すると、モックを許可するためにビジネスロジックを変更する必要はありません。

この方法は便利な場合がありますが、インターフェイスへの依存関係(IoC)を抽出することはモックを作成するのに役立つだけでなく、コンポーネント間の依存関係を減らすこともできます。

個人的には、 Rhino.Mocksはフリーウェアツールの中で一番気に入っていますが、 TypeMockも使用しています。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ