Практическое руководство. Создание и выполнение модульного теста
Модульные тесты позволяют разработчикам и тестерам быстро проверять наличие логических ошибок в методах классов проектов C#, Visual Basic .NET и C++. Модульный тест можно создать один раз, а затем выполнять каждый раз при изменении исходного кода, чтобы убедиться в отсутствии ошибок.
В этом разделе описывается использование средств модульного тестирования Microsoft Visual Studio 2010 для автоматического создания схемы модульного теста на основе существующего кода, а также добавление в схему проверок, создание категории тестов, списка тестов, выполнение тестов и чтение результатов покрытия кода.
Описание частей модульного теста см. в разделе Составляющие модульного теста.
Пример модульного теста
Этот пример базируется на сведениях раздела Пошаговое руководство. Создание и запуск модульных тестов.
На следующем рисунке показано диалоговое окно Создать модульные тесты. Оно открывается, если щелкнуть правой кнопкой мыши в файле, содержащем методы, и выбрать пункт Создать модульные тесты. Модульные тесты создаются для всех методов, выбранных в списке Типы диалогового окна.
На следующем рисунке показано, что в данном примере модульные тесты создаются для методов Credit и Debit.
После создания модульных тестов создается файл кода и изменения отображаются в обозревателе решений.
На следующем рисунке показаны результаты создания модульных тестов.
Для каждого метода, выбранного в диалоговом окне "Создать модульные тесты", создается отдельный тест. В данном примере созданы тесты для методов Credit и Debit.
Каждый созданный модульный тест имеет пустые переменные и оператор-заполнитель Assert. Оператор-заполнитель Assert — это, как правило, оператор Assert.Inconclusive.
Чтобы придать тесту содержательности, необходимо инициализировать переменные и заменить заполнитель соответствующим оператором Assert. В данном примере модульный тест Credit оставлен в том виде, в котором он был создан, а для модульного теста Debit инициализированы переменные, и выполнена замена оператора Assert.
При создании модульных тестов в решении создается проект теста.
Для каждого класса, подвергаемого тестированию, в проекте теста создается файл модульного теста. В данном примере оба тестируемых метода принадлежат одному классу. Следовательно, создан только один файл модульного теста — BankAccountTest.cs.
После выполнения тестов результаты отображаются в окне Результаты тестов.
Создание модульного теста
Создание модульного теста выполняется в два этапа.
Первый этап заключается в создании файла модульного теста, содержащего версию схемы метода теста для каждого тестируемого метода кода. Каждый созданный метод теста схемы имеет пустые переменные и оператор-заполнитель Assert.
На втором этапе выполняется инициализация переменных и замена оператора-заполнителя Assert необходимым оператором.
Создание схем для модульных тестов
Для создания модульных тестов для некоторых или всех методов, представленных в тестируемом коде, используется диалоговое окно Создать модульные тесты.
Примечание
Хотя, как правило, методы, помеченные такими атрибутами, как "закрытый", "внутренний, "дружественный", не видны вне класса этих методов, средства Microsoft Visual Studio 2010 позволяют осуществлять к таким методам доступ для модульного тестирования.Дополнительные сведения см. в разделе Модульные тесты для частных, внутренних и дружественных методов.
Создание схемы для модульного теста
Откройте в окне Редактор кода Visual Studio код, который необходимо протестировать.
(Только для служб ASP.NET) При тестировании веб-служб ASP.NET убедитесь в том, что проект содержит ASPX-страницу. Если модульный тест создается для веб-службы в проекте, не содержащем ASPX-страницу, при попытке выполнения теста появится сообщение об ошибке. Дополнительные сведения см. в разделе Модульные тесты для веб-служб ASP.NET.
Щелкните правой кнопкой мыши пространство имен, класс или метод, которые следует проверить, и нажмите кнопку Создать модульные тесты.
В диалоговом окне Создать модульные тесты установите флажки для всех методов, которые необходимо добавить в файл модульного теста.
(Не обязательно) Щелкните Параметры, чтобы изменить параметры, заданные по умолчанию для создаваемого модульного теста. Это параметры Visual Studio, применяемые ко всем модульным тестам.
Параметры наименования: эти параметры позволяют настроить правила именования файлов тестов, тестовых классов и тестовых методов при создании модульных тестов.
Помечать все результаты тестов по умолчанию как с неопределенным результатом: установите флажок, чтобы предоставить каждому методу теста в качестве заполнителя Assert оператор Assert.Inconclusive(). Снимите флажок, чтобы удалить заполнитель Asserts.
Включить примечания для документации: установите этот флажок, чтобы снабдить каждый метод теста примечанием-заполнителем. Удалите флажок, чтобы удалить комментарии-местозаполнители.
Учитывать атрибут InternalsVisibleTo: установите этот флажок, чтобы методы с атрибутами Friend и Internal обрабатывались как открытые (рекомендовано). Снимите флажок, чтобы выполнить тестирование с использованием закрытого метода доступа. Дополнительные сведения о закрытом методе доступа см. в разделе Модульные тесты для частных, внутренних и дружественных методов.
(Не обязательно) Чтобы добавить тесты для методов в сборках, для которых отсутствует исходный код, щелкнитеДобавление сборки. Дополнительные сведения см. в разделе Практическое руководство. Создание модульного теста без исходного кода.
В поле Выходной проект воспользуйтесь одной из следующих процедур.
Чтобы создать новый тестовый проект, выберите язык для нового проекта и нажмите кнопку ОК. Откроется диалоговое окно Новый тестовый проект. Введите имя нового тестового проекта или примите имя, предложенное по умолчанию, и нажмите кнопку Создать.
Для добавления методов, выбранных в диалоговом окне Создать модульные тесты, в файлы модульных тестов существующего тестового проекта выберите проект в раскрывающемся списке и нажмите кнопку ОК.
Добавление проверки к модульным тестам
Каждый модульный тест, созданный в файле модульных тестов, имеет пустые переменные и оператор-заполнитель Assert. Такой тест можно выполнять, но из-за отсутствия в нем реальных данных не удастся определить, ведет ли себя метод должным образом. Чтобы тест был полезен, необходимо инициализировать переменные и заменить оператор-заполнитель Assert оператором, соответствующим методу, т. е., как правило, оператором Assert.AreEqual.
Добавление проверки к модульному тесту
Открыть файл модульных тестов и найти тест, переменные в котором необходимо инициализировать.
Найдите в модульном тесте присвоения переменных.
В только что созданных тестах присвоения переменных помечены операторами TODO, которые напоминают о необходимости изменить присвоение. Например, ниже приведен пример типичного присвоения, которое следует изменить:
string target.owner = null; // TODO: Initialize to an appropriate value
Присвойте каждой переменной соответствующее значение. Пример присвоения соответствующих значений см. в описании процедуры "Запуск и изменение модульного теста" в руководстве Пошаговое руководство. Создание и запуск модульных тестов.
Примечание
Выполнять модульные тесты можно с помощью серии различных значений, создавая управляемый данными модульный тест.Модульный тест на основе данных — это модульный тест, который выполняется повторно для каждой строки в источнике данных.Дополнительные сведения см. в разделе Практическое руководство. Создание модульного теста, управляемого данными.
Найдите и измените в модульном тесте оператор Assert. Дополнительные сведения о доступных операторах Assert см. в разделе Использование классов Assert.
(Не обязательно) Добавьте к модульным тестам код настройки и код очистки с помощью методов [TestInitialize()] и [TestCleanup()] пространства имен Microsoft.VisualStudio.TestTools.UnitTesting. При создании модульного теста в файл модульных тестов добавляется раздел "Дополнительные атрибуты тестирования". Разверните этот раздел, чтобы просмотреть закомментированные методы, которые могут использоваться для включения инициализации и очистки.
(Не обязательно) Создание категории тестов
Для управления автоматическими тестами их можно группировать по категориям тестов. Дополнительные сведения см. в разделе Определение категорий тестов для группировки тестов.
Примечание
При группировке предпочтительнее использовать категории тестов, а не списки тестов.Категории тестов позволяют выполнять группы тестов, объединенные на основании присвоенных им категорий, без необходимости ведения списков тестов.
Создание новой категории тестов
Откройте окно Представление теста.
Выберите тест.
В области свойств щелкните Категории теста, затем щелкните многоточие в самом правом столбце.
В окне Категория проверки в поле Добавить новую категорию введите имя новой категории теста.
Щелкните Добавить, затем нажмите ОК.
Тесту будет присвоена новая категория, и она станет также доступна и для других тестов в настройках их свойств.
(Не обязательно) Создание списка тестов
Списки тестов — это способ объединения модульных тестов в логические группы. Основным преимуществом добавления модульных тестов в список тестов является возможность выполнения тестов из нескольких файлов модульных тестов, выполнение тестов как части построения и использование списков для контроля выполнения политики возврата. Дополнительные сведения о списках тестов см. в разделе Определение списков тестов для группировки тестов.
Примечание
При группировке предпочтительнее использовать категории тестов, а не списки тестов.Категории тестов позволяют выполнять группы тестов, объединенные на основании присвоенных им категориям, без необходимости ведения списков тестов.
Создание списка тестов
В меню Тест выберите команду Создать список тестов.
В диалоговом окне Создание списка тестов введите имя списка, добавьте описание, выберите место расположения списка и нажмите кнопку ОК.
Для просмотра доступных тестов в окне Редактор списка тестов щелкните Все загруженные тесты.
Перетащите тест, чтобы добавить его из главного окна в список тестов.
Выполнение модульного теста
После создания модульные тесты можно выполнить в любое время. Один из способов выполнения модульных тестов описан ниже, дополнительные сведения об альтернативных способах, таких как сочетания клавиш и команды командной строки, см. в разделе Практическое руководство. Запуск автоматических тестов из Microsoft Visual Studio.
Выполнение модульного теста
В меню Тест выберите Окна, а затем команду Представление теста.
(Не обязательно) Для сбора сведений о покрытии кода выполните следующие действия.
в меню Тест наведите указатель мыши на команду Изменить настройки тестирования и выберите конфигурацию для запуска;
в диалоговом окне Параметры тестирования щелкните Данные и диагностика;
в поле Роль выберите нужную для запуска тестов роль;
отметьте флажок Покрытие кода и щелкните Настроить;
Установите флажки для элементов, по которым следует собрать данные о покрытии кода.
в диалоговом окне Подробности покрытия кода нажмите кнопку ОК;
в диалоговом окне Параметры тестирования щелкните Применить и щелкните Закрыть.
Выберите один или несколько тестов в окне Представление теста. Для выбора нескольких тестов удерживайте нажатой клавишу CTRL.
На панели инструментов окна Представление теста щелкните значок Выполнить выбранное. Будет выполнен тест, и откроется окно Результаты теста.
(Не обязательно) Для просмотра сведений о тесте щелкните тест правой кнопкой мыши в окне Результаты теста, затем щелкните "Просмотр сведений о результатах теста".
(Не обязательно) Чтобы определить область файла модульного теста, содержащую ошибку, в диалоговом окне Трассировка стека ошибок щелкните ссылку на ошибку.
Дополнительные сведения о толковании результатов тестов см. в разделе Просмотр результатов теста.
(Не обязательно) Просмотр данных о покрытии кода
Если вы настроили сбор сведений о покрытии кода, можно открыть окно Покрытие кода, чтобы узнать, какой процент методов кода покрывается модульными тестами. Дополнительные сведения о проверке объема покрытия кода выполненными тестами, а также информацию об управлении результатами покрытия кода см. в разделе Общие сведения о данных покрытия кода.
Просмотр покрытия кода модульными тестами
На панели инструментов окна Результаты тестов щелкните Показать результаты покрытия кода. Может потребоваться увеличить окно, чтобы кнопка стала видна.
Откроется окно Результаты покрытия кода.
В окне отобразится, насколько успешно был протестирован метод.