Как создать Unit-тесты с помощью NUnit и Visual Studio
Glossary Item Box
Общие сведения
Unit-тестирование (модульное тестирование) — процесс в программировании, позволяющий проверить работоспособность изолированных частей программы (см. "Модульное тестирование"). Как правило, тесты пишутся разработчиками для каждого нетривиального метода разрабатываемого класса. Это позволяет достаточно быстро обнаружить регрессию исходного кода — появление ошибок в уже протестированных ранее частях программы.
Одним из фреймворков Unit-тестирования .NET-приложений является NUnit — среда Unit-тестирования с открытым исходным кодом. Для ее интеграции с Visual Studio разработан специальный адаптер, который может быть установлен как расширение к Visual Studio или как NuGet пакет проекта, в котором реализованы Unit-тесты. Документация фреймворка версии 3.x доступна по ссылке.
Чтобы создать Unit-тесты для методов или свойств класса, созданного в пользовательском пакете bpm'online:
1. Установите адаптер NUnit для Visual Studio.
2. Перейдите в режим разработки в файловой системе.
3. Настройте проект Unit-тестов.
4. Создайте требуемые тесты.
5. Выполните тестирование.
Описание примера
Добавить тесты для пользовательского класса, реализованного в схеме UsrNUnitSourceCode типа [Исходный код] пользовательского пакета sdkNUnit приложения bpm'online.
Исходный код
Пакет с реализацией пользовательского класса доступен в репозитории sdkNUnit на Github.
Последовательность реализации примера
1. Установить адаптер NUnit для Visual Studio
Адаптер NUnit для Visual Studio может быть установлен одним из способов — как как расширение Visual Studio или как пакет NuGet.
Установка адаптера NUnit как расширения Visual Studio
Преимущества установки адаптера NUnit как расширения для Visual Studio — доступность для любого проекта тестов, поскольку адаптер становится частью IDE. Также преимуществом является автоматическое обновление расширения. Недостаток — необходимость установки для каждого участника команды, работающего над проектом тестов.
Чтобы установить адаптер NUnit:
1. Скачайте расширение из Visual Studio Marketplace *.VSIX-файл.
2. Двойным кликом по *.VSIX-файлу запустите установку. Во время установки выберите необходимые версии Visual Studio.
К СВЕДЕНИЮ
Альтернативным вариантом является установка через меню Tools > Extensions and Updates. Выберите фильтр [Online] (рис. 1, 1) и в строке поиска укажите "NUnit 3 Test Adapter" (2). В результатах поиска выберите расширение NUnit 3 Test Adapter и нажмите кнопку [Download] (3). Установка расширения начнется автоматически.
Рис. 1. — Поиск расширения встроенными средствами Visual Studio
Установка адаптера NUnit как пакета NuGet
Преимуществом установки адаптера NUnit как NuGet-пакета является то, что он становится частью проекта Visual Studio и доступен для всех разработчиков, использующих проект. Недостаток — необходимость установки для всех проектов Unit-тестов.
Для установки адаптера NUnit:
1. Кликните правой кнопкой мышки по проекту тестов (например, Terrasoft.Configuration.Tests.csproj) и выберите команду [Manage NuGet Packages...].
2. В появившейся вкладке менеджера пакетов NuGet (рис. 2) укажите в строке поиска "NUnit3TestAdapter" (1). Выберите пакет в результатах поиска (2) и установите его (3).
Рис. 2. — Установка пакета NUnit3TestAdapter в менеджере пакетов NuGet
К СВЕДЕНИЮ
Установка NuGet-пакетов в проекты Visual Studio подробно описана в статье "Package Manager UI" документации Microsoft.
2. Перейти в режим разработки в файловой системе
Создание Unit-тестов для .NET классов, реализованных в пакетах bpm'online, возможно только в режиме разработки в файловой системе. Особенности разработки конфигурации bpm'online в файловой системе, настройка Visual Studio, а также пример работы с серверным кодом, описаны в статьях "Разработка в файловой системе", "Настройка Visual Studio для разработки в файловой системе" и "Работа с серверным кодом в Visual Studio".
В этом примере используется пользовательский пакет sdkNUnit, содержащий схему UsrNUnitSourceCode типа [Исходный код]. В исходном коде этой схемы на языке С# реализован класс UsrNUnitSourceCode, содержащий методы, для которых необходимо написать тесты.
ВАЖНО
Пакет с реализацией пользовательского класса доступен в репозитории sdkNUnit на Github.
Структура пользовательского пакета sdkNUnit после выгрузки в файловую систему имеет вид, показанный на рис. 3.
Рис. 3. — Структура пакета sdkNUnit
Исходный код класса для тестирования:
namespace Terrasoft.Configuration { public class UsrNUnitSourceCode { // Строковое свойство. public string StringToTest { get { return "String to test"; } } // Метод, проверяющий равенство двух строк. public bool AreStringsEqual(string str1, string str2) { return str1 == str2; } } }
3. Настроить проект Unit-тестов
В этом примере для создания Unit-тестов используется преднастроенный проект Terrasoft.Configuration.Tests.csproj, поставляемый вместе с решением Terrasoft.Configuration.sln (см. "Работа с серверным кодом в Visual Studio").
Чтобы использовать фреймворк NUnit для создания тестов в проекте Terrasoft.Configuration.Tests.csproj, добавьте NuGet-пакет NUnit в зависимости проекта. Для этого:
1. В Solution Explorer кликните правой кнопкой мышки по проекту тестов Terrasoft.Configuration.Tests и выберите команду [Manage NuGet Packages...].
2. В появившейся вкладке менеджера пакетов NuGet (рис. 4) укажите в строке поиска "NUnit" (1), затем выберите пакет в результатах поиска (2) и установите его (3).
Рис. 4. — Установка пакета NUnit в менеджере пакетов NuGet
4. Создать требуемые тесты
К СВЕДЕНИЮ
Одним из общепринятых соглашений является то, что имя содержащего тесты класса должно состоять из имени тестируемого класса с добавлением "Tests". Также для группировки тестов в проекте удобно помещать их в каталог, название которого совпадает с названием тестируемого пакета с добавлением окончания ".Tests".
Чтобы создать тесты для класса UsrNUnitSourceCode:
1. В проекте Terrasoft.Configuration.Tests.csproj создайте каталог sdkNUnit.Tests.
2. В каталоге sdkNUnit.Tests создайте новый класс UsrNUnitSourceCodeTests. Исходный код этого класса будет сохранен в файле UsrNUnitSourceCodeTests.cs (рис. 5).
Рис. 5. — Стуктура проекта тестов
3. Добавьте в класс UsrNUnitSourceCodeTests методы, реализующие тесты:
using NUnit.Framework; namespace Terrasoft.Configuration.Tests.sdkNUnitTests { [TestFixture] class UsrNUnitSourceCodeTests { // Экземпляр тестируемого класса. UsrNUnitSourceCode objToTest = new UsrNUnitSourceCode(); // Строка для тестирования. string str = "String to test"; [Test] public void ClassReturnsCorrectStringProperty() { // Тестирование значения строкового свойства. // Значение должно быть не пустым и совпадать с требуемым. string res = objToTest.StringToTest; Assert.That(res, Is.Not.Null.And.EqualTo(str)); } [Test] public void StringsMustBeEqual() { // Тестирование на равенство значений двух строк. bool res = objToTest.AreStringsEqual(str, "String to test"); Assert.That(res, Is.True); } [Test] public void StringsMustBeNotEqual() { // Тестирование на неравенство значений двух строк. // Этот тест будет провален, т.к. значения равны. bool res = objToTest.AreStringsEqual(str, "String to test"); Assert.That(res, Is.False); } } }
Класс UsrNUnitSourceCodeTests декорируется атрибутом [TestFixture], который маркиркирует его как класс, содержащий тесты. Каждый тестирующий определенную функциональность метод этого класса должен декорироваться атрибутом [Test]. Атрибуты фреймворка NUnit описаны в статье "Attributes" документации NUnit.
Непосредственно тестирование выполняется с помощью метода Assert.That(), который принимает тестируемое значение и ограничивающие это значение объекты в качестве аргументов. Подробнее утверждения, метод Assert.That() и модель ограничений описаны в статьях "Assertions" и "Constraint Model" документации NUnit.
5. Выполнить тестирование
Для выполнения тестирования откройте в Visual Studio окно [Test Explorer] командой меню [Test] > [Windows] > [Test Explorer] (рис. 6).
Рис. 6. — Окно [Test Explorer]
Для запуска тестов выполните команду [Run All]. Успешно пройденные тесты будут перемещены в группу [Passed Test], а проваленные тесты — в группу [Failed Test] (рис. 7).
Рис. 7. — Отображение успешных и проваленных тестов
О функциональности окна [Test Explorer] читайте в статье "Run unit tests with Test Explorer" документации Visual Studio.