Как будет выглядеть простой модульный тест, подтверждающий существование определенного контроллера, если я использую Rhino Mocks, NUnit и ASP.NET MVC 2? Я пытаюсь осмыслить концепцию TDD, но не могу понять, как будет выглядеть простой тест, такой как «Контроллер XYZ существует». Кроме того, как будет выглядеть модульный тест для проверки результата действия в представлении?
TDD контроллер с ASP.NET MVC 2, NUnit и Rhino Mocks
Ответы (2)
Подтвердите, что контроллер существует
Наличие модульных тестов его действий - убедительное предположение о существовании контроллера, что приводит нас к следующему:
Как будет выглядеть модульный тест для проверки результата действия вне представления
Вот пример:
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, а также проверьте свои маршруты.
Почему вы хотите проверить, существует ли контроллер? Что вам нужно сделать, так это протестировать поведение контроллера. Ваш контроллер - это тестируемый код, и вы возлагаете на него определенные ожидания, а затем утверждаете, оправданы ли ожидания.
Существует много пошаговых руководств о том, как выполнять TDD с помощью ASP.NET MVC. Вы можете начать например здесь