2010-03-24 7 views
6

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

+0

Что еще более важно, я использую ASP.NET MVC 2. –

+0

Должны ли мы предположить, что ваши контроллеры зарегистрированы во время выполнения? В этом случае вам не нужен тест интеграции вместо единичного теста? –

ответ

12

Убедитесь, что контроллер существует

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

Что будет с модульным тестом выглядеть как test a Действие Результат с экрана

Вот пример:

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, а также test your routes.

3

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

Существует много пошаговых инструкций о том, как делать 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

+0

Я видел это, но это неправильно. Вы не должны утверждать более одного раза за тест. Кроме того, он больше ориентирован на тестирование репозитория, чем на простой тест контроллера. –

+0

Один утверждают за тест? Это может иметь смысл в каком-то контексте в далекой галактике, но для тестов Controller это мало смысла imho. –

Смежные вопросы