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