私はADO .NET Entity Frameworkに対して書かれた単体テストコードです。インメモリデータベースに行を追加し、コードがそれらを正しく取得するようにします。
Rhino Mocksを使ってEntity Frameworkをモックすることはできますが、それだけでは不十分です。どのエンティティを返すべきかをクエリに伝えます。これはwhere節も.Include()文もテストしません。私のwhere句が意図した行だけにマッチし、他のものにはマッチしないようにしたいのです。私が必要としている実体を求めているのであり、そうではないのはないと確信したいのです。
例えば:
class CustomerService
{
ObjectQuery<Customer> _customerSource;
public CustomerService(ObjectQuery<Customer> customerSource)
{
_customerSource = customerSource;
}
public Customer GetCustomerById(int customerId)
{
var customers = from c in _customerSource.Include("Order")
where c.CustomerID == customerId
select c;
return customers.FirstOrDefault();
}
}
ObjectQueryをモックして、注文が入力された既知の顧客を返す場合、CustomerServiceに適切なwhere句とIncludeがあることをどのように確認しますか?いくつかの顧客の行といくつかの注文の行を挿入してから、正しい顧客が選択されて注文が移入されたことを表明します。
現時点ではEF用のメモリー内プロバイダーはありませんが、Highway.Dataを見れば、基本的な抽象化インターフェースとInMemoryDataContextがあります。
InMemoryプロバイダーはEF7 (プレリリース)に含まれています。
NuGetパッケージを使うことも、GitHubのEFリポジトリで見ることもできます( ソースの表示 )。