СущестЬует несколько способов создания модульных тестов. Вы можете сделать это вручную путем создания файла класса и добавления соответствующих ссылок, атрибутов и т. п. Вы можете также добавить модульный тест в тестовый проект при помощи меню Test или контекстного меню тестового проекта. Эти методы создают пустой модульный тест, в который вы можете добавлять свой код.
Visual Studio обеспечивает средство автоматизации создания модульных тестов. Вы можете щелкнуть правой кнопкой мыши по существующему классу и выбрать в контекстном меню пункт Create Unit Tests. В этом случае Visual Studio сгенерирует набор модульных тестов на базе кода вашего класса. Вы можете также щелкнуть правой кнопкой мыши по тестовому проекту и выбрать Add | Unit Test. Это позволит вам выбрать классы решения, для которых вы хотите сгенерировать модульные тесты.
Генерируется не только заглушечный код. Visual Studio изучает методы и свойства вашего класса и пишет реальные тесты. Конечно, вам придется добавить в них соответствующие значения и проверки, но генерируется вполне неплохой вариант для начала работы.
Рассмотрим пример. Допустим, что у вас есть объект Customer, который содержит такие стандартные свойства, как Name, Address, Phone и Email. Он может также содержать такие методы, как Save, Update и Delete. Предположим также, что вы хотите добавить в ваш тестовый проект новый модульный тест. Visual Studio выдаст вам диалоговое окно Create Unit Tests. Пример показан на рис. 26.12.
Рис. 26.13. Диалоговое окно Test Generation Settings
В этом диалоговом окне вы можете выбрать те члены, для которых вам необходимо сгенерировать тесты. В этом примере были выбраны члены объекта Customer. Кнопка Settings открывает диалоговое окно, которое позволяет вам указать различные настройки для генерирования ваших модульных тестов. На рис. 26.13 показан пример этого диалогового окна. Обратите внимание, что вы можете использовать макротекст [File], [Class] и [Method] для того, чтобы указать, что Visual Studio должна использовать ключевые элементы класса для того, чтобы дать названия частям теста.
Visual Studio генерирует тест для каждого метода и каждого свойства объекта. Для примера рассмотрим свойство Name. В листинге 26.2 показано то, что Visual Studio сгенерировала в качестве модульного теста для данного свойства. Обратите внимание, что этот тест создает новый экземпляр объекта Customer. Затем он пытается установить значение свойства Name. И наконец, он подтверждает, что это присваивание свойству было успешным. Это правильный тест для свойства. Все, что остается сделать разработчику, — это поместить в переменную expected допустимое значение (обратите внимание на TODO) и удалить вызов Assert.Inconclusive.
I Листинг 26.2. Пример автоматически сгенерированного модульного теста
[TestMethod()] public void NameTestO {
Customer target = new Customer();
// TODO: инициализируем соответствующим значением string expected = string.Empty;
// TODO: инициализируем соответствующим значением
string actual;
target.Name = expected;
actual = target.Name;
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Verify the correctness of this test method.");
}