2010-11-29 18 views
7

私はMoqを初めて使ったことがあり、これまでPro asp.netフレームワークで概説されている例に過ぎませんでした。この本では、シンプルさの理由から、IDで顧客を取得するなど、いくつかのクラッシュがコントローラに配置されています。私はそのタイプの機能をリポジトリに配置し、単に "customerRepository.GetCustomerByID(id);"のようにコントローラ内で呼び出すことに決めました。このようなテストをする最良の方法は何ですか?何らかの理由でnull Customerを返す次の単体テストを作成しました。Moqを使ったユニットテストリポジス

List<Customer> customer = new List<Customer>(); 

customer.Add(new Customer { CustomerId = 1, FirstName = "test", LastName = "wods", Sex = true }); 
mockRepos = new Moq.Mock<ICustomerRepository>(); 
mockRepos.Setup(x => x.Customers).Returns(customer.AsQueryable()); 

CustomersController controller = new CustomersController(mockRepos.Object); 

//Act 
ViewResult results = controller.Edit(1); 

var custRendered = (Customer)results.ViewData.Model; 
Assert.AreEqual(2, custRendered.CustomerId); 
Assert.AreEqual("test", custRendered.FirstName); 

そして私は、私は非常に愚かなことだけど、任意のヘルプはユーバーいただければ幸い想像コントローラ

public ViewResult Edit(int id) 
{ 
    Customer customer = customerRepository.GetCustomerByID(id);   

    return View(customer); //this just returns null?? 
} 

答えて

9

Customersプロパティではなく、GetCustomerByIdを呼び出すようにモックアップを設定する必要があります。このようなもの:

mockRepos.Setup(x => x.GetCustomerById(1)).Returns(customer[0]); 
+0

ありがとうございます。 – hoakey

関連する問題