私は、ADO .NET Entity Framework に対して記述された単体テスト コードです。インメモリ データベースに行を入力し、コードがそれらを適切に取得することを確認したいと考えています。
Rhino モックを使用して 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 があることをどのように確認できますか? 顧客の行と注文の行をいくつか挿入してから、適切な顧客が選択され、注文が取り込まれたことをアサートします。