Создание и выполнение тестов

Набор простейших тестов, проверяющий корректность работы контроллера 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).

Как видно из приведенного ранее примера, создание самого теста — задача достаточно простая. Далее будет рассмотрен процесс создания более сложного веб-приложения, требующего написания более сложных тестов.