C момента выхода Visual Studio наиболее часто подвергался критике тот факт, что в среду разработки было невозможно (или почти невозможно) интегрировать сторонние библиотеки модульного тестирования.
Мнения о том, когда следует проводить модульные тесты для ПО, разделились. Некоторые разработчики считали, что это нужно делать после написания кода, но большинство программистов склонялись к созданию модульных тестов до написания производственного кода. Подобный подход называется разработкой, управляемой тестами.
На рисунке 1 показан традиционный процесс написания модульных тестов. Пунктирными стрелками обозначены необязательные этапы.
Рисунок 2. Разработка, управляемая тестами: общее представление. Обратите внимание на спиральный характер процесса: написание теста, написание кода, рефакторинг, написание следующего теста. Здесь отчетливо видна инкрементная природа разработки, управляемой тестами: маленькие тесты ведут к качественному конечному результату.
Разработка, управляемая тестами, отличается от традиционного подхода, показанного на рисунке 1. Разработчик начинает с написания заведомо неуспешного теста. Если программа не проходит его, то начинается создание производственного кода. Если тест пройден, то либо выполняется рефакторинг кода, либо создается другой заведомо неуспешный тест. Ранее пользователи среды MSTest полагались на автоматически сгенерированные тесты, формируемые после написания кода. Это настолько противоречило принципам разработки, управляемой тестами, что многие разработчики попросту игнорировали среду MSTest и находили способы использования сторонних сред модульного тестирования, например NUnit, MBUnit, xUnit и т. д., для своих проектов .NET. Таким образом, конец среды MSTest, порицаемой сторонниками разработки, управляемой тестами, был неизбежен.
В Visual Studio 2012 представлены средства, позволяющие тесно интегрировать среды наподобие NUnit в среду разработки, что дает возможность создавать тесты до написания кода. Поговорим о том, как это сделать.
Настройка адаптера тестов NUnit
1. Подключите среду тестирования Visual Studio 2012 к NUnit. Для этого загрузите и установите расширение адаптера тестов NUnit с помощью диспетчера расширений Visual Studio:
2. В левой вкладке выберите Online (В сети), в поле Search (Поиск), расположенном в правом верхнем углу, введите «NUnit Test Adapter». На данном этапе потребуется подключение к Интернету.
3. После появления адаптера тестов NUnit нажмите кнопку Download (Загрузить). По окончании загрузки следуйте указаниям по установке адаптера тестов NUnit.
4. Если в нижней части окна появится запрос Restart Now (Перезапустить сейчас), подтвердите его, чтобы задействовать установленные компоненты в Visual Studio 2012.
После этого Visual Studio 2012 позволит запускать тесты NUnit в интегрированной среде разработки.
Создание первого проекта тестирования NUnit
Теперь давайте создадим наш первый проект тестирования NUnit.
- Перейдите в меню File (Файл) -> New (Новый) -> Project (Проект), в разделе Visual C# выберите Class Library (Библиотека классов) и переименуйте ее в NUnitTests. Вероятно, стоит задать более осмысленное название для Class1.cs, например NUnitTests.
- В обозревателе решений щелкните правой кнопкой мыши по ссылкам и выберите Manage NuGet Packages (Управление пакетами NuGet).
3. В левой вкладке выберите Online (В сети) и в поле Search (Поиск) введите «NUnit». После появления результата нажмите Install (Установить).
4. Теперь, когда в проект включены все классы, необходимые для NUnit, настало время написать модульный тест.
Чтобы проверить, работает ли NUnit в Visual Studio, добавьте следующий участок кода и пробный тест:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NUnit.Framework;
namespace TailSpinToys.UnitTesting
{
[TestFixture]
public class NUnitTests
{
[Test]
public void SumOfTwoNumbers()
{
Assert.AreEqual(10,5 + 5);
}
[Test]
public void AreTheValuesTheSame()
{
Assert.AreSame(10, 5 + 6);
}
}
}
Чтобы запустить тест, перейдите в меню Test (Тест), выберите Run (Выполнить), а затем All Tests (Все тесты). Также можно нажать сочетание клавиш Ctrl+R и затем A. Результаты теста появятся на вкладке Test Explorer (Обозреватель тестов) и будут выглядеть следующим образом:
Если тест не пройден, отобразятся дополнительные сведения: выделенный ожидаемый результат, фактический результат, а также трассировка стека, которая поможет понять причины неудачного прохождения теста.
Теперь вы готовы к использованию NUnit для разработки, управляемой тестами, в IDE Visual Studio 2012.