Asp.net mvc framework
Шрифт:
Установка и настройка NUnit
Для начала необходимо загрузить и установить оснастку тестирования NUnit . Затем установить шаблоны проектов тестирования , для этого нужно загрузить архив NUnit Test Templates, скопировать содержимое директории CSharp в директорию \Documents\Visual Studio 2008\Templates\ProjectTemplates\Visual C# (аналогично для директории Visual Basic, если вы используете язык Visual Basic), после чего загрузить данные из REG-файла в реестр для регистрации шаблона NUnit в мастере создания проектов ASP.NET MVC Framework.
Когда вы завершите процедуры установки NUnit и шаблонов проектов, при создании нового проекта ASP.NET MVC Framework появится возможность создать проект для тестирования с использованием NUnit (рис. 8.1).
После создания проекта вместе с проектом веб-приложения будет создан проект библиотеки классов, являющийся основной сборкой для тестирования веб-приложения, представленный на рис. 8.2.
Рис. 8.2. Проект тестирования веб-приложения
В случае если необходимо создать проект тестирования для уже существующего проекта, достаточно добавить в решение проект библиотеки классов, добавить в него ссылку на тестируемый проект и ссылку на сборку nunit.framework.dll, находящуюся в директории bin в директории установки NUnit, и создать тесты так, как будет показано далее в этой главе.
Создание и выполнение тестов
Набор простейших тестов, проверяющий корректность работы контроллера Home из шаблона веб-приложения, приведен в листинге 8.1.
Листинг 8.1. Тесты контроллера Ноше
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using NUnit.Framework;
using MvcTestApp;
using MvcTestApp.Controllers;
namespace MvcTestApp.Tests.Tests.Controllers
{
[TestFixture]
public class HomeControllerTest
{
[Test]
public void Index
{
HomeController controller = new HomeController;
ViewResult result = controller.Index as ViewResult;
ViewDataDictionary viewData = result.ViewData;
Assert.AreEqual("Welcome to ASP.NET MVC!",
viewData["Message"]);
}
[Test]
public void About
{
HomeController controller = new HomeController;
ViewResult result = controller.About as ViewResult; Assert.IsNotNull(result);
}
}
}
Тесты представляют собой методы, помеченные атрибутом Test, помещенные в классы, помеченные атрибутом TestFixture. Среда выполнения тестов NUnit находит в сборке с тестами тестирующие методы именно по этим атрибутам.
Структура каждого теста может быть разбита на три основных элемента:
? подготовка данных и объектов для проведения теста;
? выполнение действия, результат которого нужно протестировать;
? проверка результатов выполнения действия.
Рассмотрим тестовый метод Index из листинга 8.1, проверяющий одноименное действие контроллера Home.
Подготовка данных и объектов в этом случае представляет собой только лишь создание экземпляра класса HomeController.
HomeController controller = new HomeController;
Выполнение действия — вызов метода Index у созданного ранее объекта controller, возвращающего результат типа viewResult.
ViewResult result = controller.Index as ViewResult;
Проверка результата в данном случае заключается в проверке значения, помещенного в коллекцию ViewData с ключом Message с помощью метода класса Assert, используемого для целей отладки и тестирования.
Assert.AreEqual("Welcome to ASP.NET MVC!", viewData["Message"]);
После того как тесты созданы, сборку, содержащую тесты, нужно скомпилировать и загрузить в графическую оболочку NUnit. Оболочка распознает методы, помеченные атрибутами Test, и выводит их в виде дерева тестов, как это показано на рис. 8.3.
Тесты можно выполнять по одному, либо блоками, относящимися к одному классу, содержащему тестирующие методы, либо все тесты сразу (рис. 8.4).
Теперь представим себе, что вследствие развития проекта результат выполнения метода Index изменился, и в коллекцию ViewData с ключом Message помещается другая строка.
public ActionResult Index
{
ViewData["Message"] = "Всем привет!";
return View;
}
Достаточно выполнить перекомпиляцию проекта, не закрывая графического интерфейса NUnit, и сборка, содержащая тесты, будет автоматически загружена заново. В результате выполнения соответствующего теста будет
отображено сообщение об ошибке, включающее детальную информацию, а также фрагмент исходного кода теста, сообщивший о невыполнении условий теста (рис. 8.5).
Как видно из приведенного ранее примера, создание самого теста — задача достаточно простая. Далее будет рассмотрен процесс создания более сложного веб-приложения, требующего написания более сложных тестов.
Несколько слов о важности тестирования
На первый взгляд может показаться, что польза от тестов не велика, если само приложение написано грамотно, модификация кода при развитии приложения происходит под строгим контролем, и выполняется ручное тестирование веб-приложения. Однако такое впечатление складывается только на первый взгляд и для несложных проектов. При автивном внесении изменений в проекты с большим объемом кода автоматическое тестирование позволяет не просто существенно сократить время на проверку корректности внесенных изменений, но и гарантировать совместимость компонентов системы. Кроме того, сам факт создания тестов и разработка архитектуры приложения с учетом тестирования существенно влияет на чистоту кода и архитектуры.