Как би изглеждал прост модулен тест за потвърждаване, че определен контролер съществува, ако използвам Rhino Mocks, NUnit и ASP.NET MVC 2? Опитвам се да обмисля концепцията за TDD, но не мога да разбера как би изглеждал прост тест като „Controller XYZ Exists“. Освен това, как би изглеждал единичният тест за тестване на резултат от действие извън изглед?
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. Можете да започнете например тук