Я пытаюсь проверить действие Index контроллера. Действие использует AutoMapper для сопоставления объекта домена Customer с моделью просмотра TestCustomerForm. Хотя это работает, меня беспокоит лучший способ проверить результаты, которые я получаю от действия Index.
Действие индекса контроллера выглядит следующим образом:
public ActionResult Index()
{
TestCustomerForm cust = Mapper.Map<Customer,
TestCustomerForm>(_repository.GetCustomerByLogin(CurrentUserLoginName));
return View(cust);
}
И его TestMethod выглядит так:
[TestMethod]
public void IndexShouldReturnCustomerWithMachines()
{
// arrange
var customer = SetupCustomerForRepository(); // gets a boiler plate customer
var testController = CreateTestController();
// act
ViewResult result = testController.Index() as ViewResult;
// assert
Assert.AreEqual(customer.MachineList.Count(),
(result.ViewData.Model as TestCustomerForm).MachineList.Count());
}
В методе CreateTestController я использую Rhino.Mocks, чтобы высмеять репозиторий клиентов и настроил его, чтобы вернуть клиента из SetupCustomerForRepository. Таким образом, я знаю, что репозиторий вернет предполагаемого клиента, когда действие Index вызывает _repository.GetCustomerByLogin(CurrentUserLoginName). Поэтому я считаю, что утверждение равного количества удовлетворяет требованиям IndexShouldReturnCustomerWithMachines.
Все это говорит, что я обеспокоен тем, что я должен тестировать.
- Кажется самонадеянным бросать
result.ViewData.Model as TestCustomerForm. Это действительно проблема? Это касается меня, потому что в этом случае я действительно не делаю разработку, основанную на тестах, и кажется, что я рассчитываю на конкретную реализацию, чтобы удовлетворить этот тест. - Есть ли более подходящие тесты для обеспечения правильного отображения?
- Должен ли я тестировать каждое отображаемое свойство из
TestCustomerForm? - Есть ли более общие тесты действий контроллера, которые я должен делать?