TDD контроллер с ASP.NET MVC 2, NUnit и Rhino Mocks - PullRequest
6 голосов
/ 24 марта 2010

Как бы выглядел простой модульный тест для подтверждения существования определенного контроллера , если я использую Rhino Mocks, NUnit и ASP.NET MVC 2? Я пытаюсь обдумать концепцию TDD, но не могу понять, как будет выглядеть простой тест, такой как «Controller XYZ Exists». Кроме того, как будет выглядеть модульный тест для проверки результата действия с представлением ?

Ответы [ 2 ]

11 голосов
/ 24 марта 2010

Подтвердите, что контроллер существует

Наличие модульных тестов для его действий - убедительное предположение, что контроллер существует, что приводит нас к:

На что будет похож модульный тест протестировать результат действия из представления

Вот пример:

public class HomeController: Controller
{
    private readonly IRepository _repository;
    public HomeController(IRepository repository)
    {
        _repository = repository;
    }

    public ActionResult Index()
    {
        var customers = _repository.GetCustomers();
        return View(customers);
    }
}

И соответствующий юнит-тест:

[Test]
public void HomeController_Index_Action_Should_Fetch_Customers_From_Repo()
{
   // arrange
   var repositoryStub = MockRepository.GenerateStub<IRepository>();
   var sut = new HomeController(repositoryStub);
   var expectedCustomers = new Customer[0];
   repositoryStub
       .Stub(x => x.GetCustomers())
       .Return(expectedCustomers);

   // act
   var actual = sut.Index();

   // assert
   Assert. IsInstanceOfType(typeof(ViewResult), actual);
   var viewResult = (ViewResult)actual;
   Assert.AreEqual(expectedCustomers, viewResult.ViewData.Model);
}

MVCContrib имеет несколько замечательных функций, позволяющих вам макетировать HttpContext, а также проверять маршруты .

3 голосов
/ 24 марта 2010

Почему вы хотите проверить, существует ли контроллер? Что вы должны сделать, это проверить поведение контроллера. Ваш контроллер - это тестируемый код, и вы возлагаете на него определенные ожидания, а затем утверждаете, оправданы ли ожидания.

Существует множество пошаговых инструкций по созданию TDD с ASP.NET MVC. Вы можете начать, например, здесь

http://codebetter.com/blogs/jeffrey.palermo/archive/2008/03/09/this-is-how-asp-net-mvc-controller-actions-should-be-unit-tested.aspx

...