Общие сведения о модульных тестах
Обновлен: Ноябрь 2007
Модульные тесты — это программные тесты, написанные на языках Visual C#, Visual Basic или Visual C++, и компилируемые с параметром /clr:safe.
Примечание. |
---|
Подробные сведения об использовании модульных тестов, написанных на C++ или содержащих рабочий код C++, см. в разделе Модульные тесты и C++. |
Модульные тесты используются для выполнения другого исходного кода путем прямого вызова методов класса и передачи соответствующих параметров. Затем, если добавить в код операторы Assert, можно сравнить созданные значения с ожидаемыми. Методы модульных тестов находятся в классах тестов, которые хранятся в файлах исходного кода.
Можно создавать модульные тесты с помощью функции автоматического создания кода, создающей первоначальных исходный код теста; также можно полностью создавать тесты вручную. В обоих случаях тестовый класс и тестовые методы определяются с помощью программных атрибутов.
Каждый тестовый класс помечен атрибутом [TestClass()]. Каждый модульный тест — это тестовый метод, помеченный атрибутом [TestMethod()]. Эти атрибуты присваиваются автоматически при формировании модульных тестов; при создании модульных тестов вручную нужно самостоятельно добавлять атрибуты классов и методов. Дополнительные сведения см. в разделе Структура модульных тестов.
Автоматическое создание модульных тестов
Можно создавать модульные тесты вручную с помощью диалогового окна в Visual Studio. Каждый создаваемый модульный тест представляет собой метод C#, Visual Basic или Visual C++. Код и атрибуты метода находятся в файле исходного кода в тестовом проекте на таком же языке. Новые тесты предназначены для определенного кода, который нужно протестировать. Можно создать одиночный модульный тест для одного метода, несколько тестов для выбранных методов или несколько тестов для всех методов в классе или пространстве имен.
Можно создавать модульные тесты из исходного кода в текущем проекте. Также можно создавать модульные тесты из построения в файловой системе; это полезно, когда исходный код недоступен.
Код только что созданного текста компилируется, но его нужно изменить, чтобы получить значимые результаты. Например, можно изменить код, присвоив значения переменным и настроив операторы Assert. Созданные модульные тесты содержат операторы TODO, которые обозначают строки кода, нуждающиеся в изменении.
Примечание. |
---|
В Team System (средства тестирования) при создании модульных тестов используется соглашение об именовании. Например, имя тестового файла получается путем соединения слова "Test" с именем файла, содержащего тестируемый код, например Class1Test.cs. Имена тестовых классов и методов также формируются с использованием значений по умолчанию. Эти значения можно изменить в диалоговом окне Конфигурация создания тестов. Чтобы открыть это окно, щелкните Настроить в диалоговом окне Создание модульных тестов. |
Дополнительные сведения см. в разделе Практическое руководство. Создание модульного теста.
Создание модульных тестов вручную
Можно создавать модульные тесты вручную, не пользуясь их автоматическим созданием. Лучший способ сделать это — добавить модульный тест в тестовый проект; при этом создается метод теста, не содержащий кода, но с примененным атрибутом [TestMethod()]. Для завершения работы над тестом нужно изменить файл исходного кода теста, который находится в тестовом проекте в решении. Дополнительные сведения см. в разделах Практическое руководство. Создание модульного теста и Структура модульных тестов.
Платформа Unit Testing Framework
Платформа Unit Testing Framework обеспечивает множество дополнительных классов Assert и других классов, которые обеспечивают гибкость при написании модульных тестов. Дополнительные сведения см. в документации о пространстве имен и типах Платформа Unit Testing Framework в разделе Microsoft.VisualStudio.TestTools.UnitTesting.
Наследование тестовых классов
Тестовым классом является любой класс, помеченный атрибутом "TestClass". Теперь тестовые классы могут наследовать элементы от других тестовых классов. Это означает, что можно создавать повторно используемые тесты в базовых классах тестов; производные классы тестов могут наследовать тесты от базовых классов. Благодаря этому исчезает необходимость дублирования кода, а разработчики получают более гибкие возможности при модульном тестировании рабочего кода.
Класс теста не может наследовать от класса в другом построении. Это ограничение можно обойти следующим способом.
Определите базовый класс теста в файле исходного кода и добавьте файл в проект А.
Добавьте такой же файл исходного кода в другой проект — проект B. Для этого щелкните правой кнопкой мыши проект в обозревателе решений, выберите Добавить, Существующий элемент и выберите файл в окне Добавление существующего элемента.
Проект B находится в другом построении, но содержит базовый класс теста. Другие классы теста в проекте B могут наследовать от базового класса теста.
Пример наследования
В рабочем коде есть две реализации: в одной используется Microsoft SQL Server, в другой — Oracle. Обе реализации должны работать одинаково. Можно создать абстрактный тестовый класс DBTestSuite, содержащий стандартный тестовый код. Затем можно создать два класса SQLTestSuite и OracleTestSuite, производные от DBTestSuite. Производные классы должны реализовывать только абстрактный метод Connect. После этого один тестовый класс будет подключаться к Microsoft SQL Server, а другой к Oracle.
Далее можно создать тестовый класс EmptySQLTestSuite, производный от SQLTestSuite, для тестирования пустой базы данных Microsoft SQL Server. Для повышения производительности можно переопределить методы тестов, которые не нужны для тестирования пустой базы данных.
При использовании наследования тестовых классов в окне Представление теста и в редакторе списков тестов отображаются тестовые методы и в базовых, и в дочерних классах. Чтобы узнать, в каком классе находится тест, отобразите столбцы Имя класса или Полное имя класса в редакторе списков тестов. Дополнительные сведения см. в разделе Практическое руководство. Настройка представлений тестов.
Тестирование закрытых методов
С помощью модульных тестов можно тестировать не только открытые, но и закрытые методы. Как и для открытых методов, модульные тесты для закрытых методов создаются автоматически при формировании модульных тестов из кода, который нужно протестировать. Дополнительные сведения см. в разделах Практическое руководство. Тестирование закрытых методов и Использование закрытых методов доступа.
Особые виды модульных тестов
В приведенной ниже таблице перечислены дополнительные виды модульных тестов.
Тип модульного теста |
Описание |
---|---|
модульные тесты, управляемые данными |
Тест, управляемый данными — это модульный тест, который настраивается для повторного вызова для каждой строки в источнике данных. Данные из каждой строки доступны для каждого последующего запуска теста в качестве входных данных. Дополнительные сведения см. в разделе Общие сведения о модульных тестах, управляемых данными. |
ASP.NET модульные тесты |
Модульные тесты ASP.NET служат для выполнения кода в приложении ASP.NET при его ответе на запросы страниц. Модульные тесты ASP.NET запускаются внутри тестируемого приложения ASP.NET. Дополнительные сведения см. в разделе Общие сведения о модульных тестах ASP.NET. |
Модульные тесты для смарт-устройств |
Модульные тесты для смарт-устройств выполняются внутри ведущих процессов на смарт-устройствах или эмуляторах. Дополнительные сведения см. в разделе Общие сведения о модульных тестах смарт-устройств. |
Модульные тесты веб-служб |
Сведения о модульный тест веб-служб см. в разделе Тестирование веб-служб. |
См. также
Основные понятия
Работа с модульными тестами на основе данных
Другие ресурсы
Работа с модульными тестами ASP.NET