Модульное тестирование репозитория с Moq - PullRequest
7 голосов
/ 29 ноября 2010

Я совершенно новичок в Moq и до сих пор только что ознакомился с примерами, изложенными в платформе Pro asp.net.В книге некоторые из них размещены в контроллере, например, для получения клиента по идентификатору - возможно, из соображений краткости.Я решил разместить этот тип функциональности в хранилище и просто вызвать его в контроллере, например, так: 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);

И контроллер

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

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

Iпредставьте, что я очень глупый, но любая помощь будет очень полезна.

1 Ответ

9 голосов
/ 29 ноября 2010

вам нужно настроить макет для ожидания вызова GetCustomerById, а не свойства Customers.Как то так:

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