Необходимо проводить различие между юнит-тестами, интеграционными тестами и веб-тестами.Модульные тесты предназначены для тестирования различных компонентов вашего кода, таких как действия контроллера в отдельности.Интеграционные тесты предназначены для тестирования интеграции между вашим кодом и внешними компонентами, такими как хранилище, которое считывает и записывает данные из базы данных, а веб-тест предназначен для тестирования всего пользовательского сценария вашего приложения, такого как пользователь, набирающий некоторый адрес в адресной строкесвоего браузера, нажав на какую-нибудь кнопку, ...
MVCContrib.TestHelper и Rhino Mocks предназначены для упрощения ваших юнит-тестов.Таким образом, в вашем сценарии вы должны проверить действие контроллера Index
.Без показа кода, который содержит это действие контроллера, сложно сказать, что именно нужно тестировать.В целом, что вы можете выполнить модульное тестирование в действии контроллера, так это то, что он проверяет входные данные, вызывает соответствующие методы в хранилище и в соответствии с результатами возвращает правильное представление.
Итак, давайте предположим, что у вас есть следующее индексное действие, которое вы хотите протестировать:
public class HomeController: Controller
{
private readony INewRepository _repository;
public HomeController(INewRepository repository)
{
_repository = repository;
}
public ActionResult Index()
{
var news = _repository.GetNews();
return View(news);
}
}
и соответствующий юнит-тест:
[TestClass]
public class HomeControllerTests : TestControllerBuilder
{
private HomeController _sut;
private INewsRepository _repositoryStub;
[TestInitialize()]
public void MyTestInitialize()
{
_repositoryStub = MockRepository.GenerateStub<INewsRepository>();
_sut = new UsersController(_repositoryStub);
InitializeController(_sut);
}
[TestMethod]
public void UsersController_Index_Should_Fetch_News_From_Repository()
{
// arrange
var news = new News[0];
_repositoryStub.Stub(x => x.GetNews()).Return(news);
// act
var actual = _sut.Index();
// assert
actual
.AssertViewRendered()
.WithViewData<News[]>()
.ShouldBe(news);
}
}
Насколько вашПредставления обеспокоены тем, что вам нужно будет написать веб-тесты, чтобы убедиться, что они ведут себя как положеноЗдесь вам могут помочь различные инструменты, такие как Selenium или прямое использование Веб-тесты , если у вас установлена Ultimate версия Visual Studio.Стивен Сандерсон также предложил интересный подход для тестирования представлений, на которые вы можете взглянуть.