Moq:如何根据方法参数返回结果?

Ric*_*d77 3 moq

ICustomerRepository定义:Customer GetCustomerByID(int CustomerID);

//Arrange
var customers = new Customer()
{
   new Customer() { CustomerID = 1, Name = "Richard" },
   new Customer() { CustomerID = 2, Name = "Evan" },
   new Customer() { CustomerID = 3, Name = "Marie-France" },
}.AsQueryable(); 

Mock<ICustomerRepository> mock = new Mock<ICustomerRepository>();
Run Code Online (Sandbox Code Playgroud)

如何根据CustomerID参数告诉Moq返回正确的客户?

我已经能够设置第一部分,但不能设置返回对象.

 mock.Setup(m => m.GetCustomerByID(It.Is<int>(i => i >= 0))).Returns(/// To be define///)
Run Code Online (Sandbox Code Playgroud)

想法的结果与此相同:

public Customer GetCustomerByID(int CustomerID)
{
  return customers.FirstOrDefault(c => c.CustomerID == CustomerID);
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

Tru*_*ill 6

mock.Setup(x => x.GetCustomerByID(It.IsAny<int>()))
    .Returns((int id) => 
    customers.FirstOrDefault(c => c.CustomerID == id));
Run Code Online (Sandbox Code Playgroud)

只需让客户List<Customer>- 不需要AsQueryable.