71

Entity Framework を使用して構築されたエンティティをテストしたいと考えています。私の懸念は、Entity Framework を使用するということは、データ ソースを直接操作することを意味するということです。Entity Framework ベースのコンポーネントを単体テストする方法はありますか?

4

13 に答える 13

50

Enity Framework 4 の場合、これは有望に見えます: Testability and Entity Framework 4.0

于 2010-06-09T09:30:55.227 に答える
7

どうやらとても大変そうです。ここでエリックが雄弁に述べた - TDD and ADO.NET Entity Framework

于 2008-11-28T22:28:55.730 に答える
6

安価なアプローチは、実際のデータベースと同じ構造のデータベースファイルを設定し、それを指すように単体テスト構成の接続文字列を設定することです。データベースには、実際のテーブルにあるすべてのテーブルが含まれている必要はありません。ユニットテストに必要なものだけです。

欠点は、単体テストが実行中および実行間で相互に影響を与えないように、データベースの状態を管理する必要があることです。

このアプローチは、実際のテストDBと単体テストDBの両方がSQL Expressを使用する場合に機能することは知っていますが、完全なSQLDBのSqlExpressDBでのスタブについてはわかりません。

これは技術的には統合テストであると思いますが、コードをリファクタリングしたり、モックフレームワークを学習したりするよりも安価な場合があります。

実際の接続文字列の例:

<add name="DrinksEntities" 
     connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient
     ;provider connection string=&quot;Data Source=localhost\sqlexpress;Initial Catalog=Drinks2;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" />

接続文字列をテストするユニットの例:

<add name="DrinksEntities" 
     connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient
     ;provider connection string=&quot;Data Source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\Inventory.mdf;Integrated Security=True;user instance=True;MultipleActiveResultSets=True;Application Name=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" />
于 2011-10-22T16:35:57.307 に答える
4

これに対する別の意見を共有したいと思います。TypeMockIsolatorを使用してEntityFrameworkベースのコンポーネントとアプリケーションをテストすることもできました。しかしそれは商業的です。

この投稿をご覧ください: TypeMockIsolatorを使用したEntityFrameworkユニットテストの紹介

于 2009-09-14T23:29:04.530 に答える
4

実際のデータにアクセスするのではなく、モッキング フレームワークを使用してモック値を取得する必要があります。いくつかのモック フレームワークのリストと、開始に役立つスクリーンキャストへのリンクを次に示します。

開始方法に関するいくつかのスクリーンキャストを次に示します。

于 2008-12-01T01:56:12.487 に答える
4

Entity Framework のバージョン 1 はいくつかの主要なソフトウェア設計原則に違反しているため、アプリケーションで TDD を使用する場合に TDD を適用する方法は実際にはありません。私の調査では、即時の解決策を探している場合は NHibernate を指しています。単体テストを念頭に置いて設計されています。

ただし、待つことができれば、Entity Framework の次のリリースに希望があるようです: Entity Framework 4.0 を使用したテスト駆動開発のチュートリアル

于 2010-01-26T04:30:41.037 に答える
3

例は非常に単純化されているかもしれませんが、私はまさにこの問題に対する可能な解決策について議論しようとしました. これには、懸念の分離と親愛なる友人の依存性注入が含まれます。

http://devblog.petrellyn.com/

詳細が必要な場合は、私に連絡してください。

于 2009-05-18T20:56:08.307 に答える
2

私は同意します、モッキングフレームワークはあなたが求めているものです。データソースから取得されない「モック」オブジェクトを作成し、そのオブジェクトのデータをテストします。私は個人的に Moq を使用してきましたが、気に入っています。Rhinomocks などもあります。

于 2008-12-01T01:49:27.727 に答える
0

Entity Framework モデルをテストするためにインメモリ データベースを使用できます。詳細はこちら

于 2013-10-15T12:03:05.487 に答える
0

これは、作業単位パターン + インメモリ データベース + 偽の EF dbContext を自動的に生成する t4 コード生成の集計です。

http://mockingcompetence.wordpress.com/2013/05/20/fakingefdatacontext/

現時点で実際の EF db 接続を正確に複製するには、いくつかの問題があります (無効な linq to EF クエリと FK 強制なし)。

ただし、単体テストをすばやく実行するためのメモリ内コンテキストを持つことは、TDD やその他の種類の単体テスト中心のアプローチを実行できるようにするためにほぼ不可欠です。

問題の詳細がわかり次第、上記のリンクに更新を投稿します。

于 2013-05-30T10:37:10.450 に答える
0

WPF Application Framework (WAF)プロジェクトのBookLibraryサンプル アプリケーションは、Entity Framework ベースのアプリケーションを単体テストする方法を示しています。

于 2010-07-28T16:57:13.873 に答える
-1

モッキングフレームワークを使用するのはどうですか?モッキング フレームワークは、ビジネス ロジックをデータベースから隔離するのに役立つように思えます。

于 2008-11-29T17:24:49.010 に答える