Asp.net mvc 具有Moq的单元测试存储库

Asp.net mvc 具有Moq的单元测试存储库,asp.net-mvc,unit-testing,repository,moq,Asp.net Mvc,Unit Testing,Repository,Moq,我对Moq完全陌生,到目前为止,我只是遵循了Pro asp.net框架中概述的示例。在书中,一些crud被放置在控制器中,例如通过id获取客户-可能是出于简洁的原因。我决定将这种类型的功能放在存储库中,并在控制器中调用它,如“customerRepository.GetCustomerByID(id)”;“测试这种功能的最佳方法是什么?我创建了以下单元测试,出于某种原因,它返回空客户 List<Customer> customer = new List<Customer>

我对Moq完全陌生,到目前为止,我只是遵循了Pro asp.net框架中概述的示例。在书中,一些crud被放置在控制器中,例如通过id获取客户-可能是出于简洁的原因。我决定将这种类型的功能放在存储库中,并在控制器中调用它,如“customerRepository.GetCustomerByID(id)”;“测试这种功能的最佳方法是什么?我创建了以下单元测试,出于某种原因,它返回空客户

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);

我想我是很傻,但任何帮助都将不胜感激。

您需要设置您的模型,以期望调用
GetCustomerById
,而不是
Customers
属性。大概是这样的:

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