Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Посмотрим на примере, как создавать юнит-тесты. По умолчанию при создании проекта в любой версии Visual Studio 2013 для создаваемого проекта веб-приложения нам уже предлагается включить дополнительный проект с тестами с помощью опции Add unit tests:
Отметим данный флажок и создадим новый проект.
Если вдруг нам надо добавить тесты к уже существующему проекту, то мы можем добавить в решение новый тип проекта Unit Test Project. Как правило, для проекта тестов название выбирается по следующей схеме [название_главного_проекта].Tests:
При одновременном создании обоих проектов по умолчанию тестовый проект уже содержит ряд тестов:
В частности для контроллера HomeController в проекте тестов будет создан класс HomeControllerTest:
[TestClass] public class HomeControllerTest { [TestMethod] public void Index() { // Arrange HomeController controller = new HomeController(); // Act ViewResult result = controller.Index() as ViewResult; // Assert Assert.IsNotNull(result); } [TestMethod] public void About() { // Arrange HomeController controller = new HomeController(); // Act ViewResult result = controller.About() as ViewResult; // Assert Assert.AreEqual("Your application description page.", result.ViewBag.Message); } [TestMethod] public void Contact() { // Arrange HomeController controller = new HomeController(); // Act ViewResult result = controller.Contact() as ViewResult; // Assert Assert.IsNotNull(result); } }
Класс тестов имеет атрибут [TestClass]
, а каждый метод, проводящий тестирование, - атрибут [TestMethod]
.
Каждый метод содержит три логических части - Arrange, Act и Assert. Они помечены соответствующими комментариями. Вкратце рассмотрим, что они делают.
Секция Arrange выполняет начальную инициализацию контекста тестов, а именно создает объект контроллера: HomeController controller = new HomeController()
Далее в секции Act выполняет само действие, которое надо протестировать, а именно генерация представления: ViewResult result = controller.Index() as ViewResult
. Так как метод Index контроллера
возвращает объект ActionResult, то его еще надо привести к объекту ViewResult.
Чтобы проверить на выполнение предыдущее действие, в секции Assert вызывается метод Assert.IsNotNull(result)
. Этот метод проверяет, был ли сгенерирован объект представления
в предыдущей секции. Класс Assert еще имеет ряд методов, которые позволяют верифицировать результат.
Модель тестов Arrange-Act-Assert представляет просто особенность тестирования в Visual Studio, а целую парадигму тестирования:
Arrange: подготовка среды, в которой выполняется код
Act: тестирование кода (обычно представляет одну строку кода)
Assert: убеждаемся, что результат теста именно тот, что мы и ожидали
Этот простейший стандартный тест не охватывает всех возможных ошибок, например, были ли сгенерировано нужное представление. Он просто призван дать начальное понимание работы тестов.
Теперь запустим тест на выполнение. Для этого перейдем в окно Test Explorer и нажмем в нем на кнопку Run All:
Если оно по умолчанию не открыто, запустить тесты можно через меню Test->Run->All Tests:
Если все нормально, то обозреватель тестов сигнализирует нам зеленым цветом, что все тесты успешно пройдены:
Теперь создадим собственные тесты.