Составляющие модульного теста
Во время создания модульного теста к решению добавляются несколько файлов. В этой статье мы на примере модульного теста будем изучать наиболее распространенные файлы. Пример взят из раздела Пошаговое руководство. Создание и запуск модульных тестов.
Составные файла модульного теста
Во время создания модульного теста для каждого класса, подвергаемого тестированию, создается отдельный файл модульного теста. Каждый файл модульного теста содержит метод теста для каждого метода, подвергаемого тестированию. В данном примере оба тестируемых метода принадлежат одному классу. Следовательно, создан только один файл тестового класса — BankAccountTest.cs.
Верхняя часть файла
На рисунке ниже показаны первые несколько строк кода, включая ссылку на пространства имен, TestClassAttribute и класс TestContext. См. примеры кода в пошаговом руководстве.
Microsoft.VisualStudio.TestTools.UnitTesting: во время создания модульного теста ссылка на пространство имен Microsoft.VisualStudio.TestTools.UnitTesting добавляется к тестовому проекту, и пространство имен включается в использующую его инструкцию в верхней части файла модульного теста. Пространство имен содержит много классов для модульных тестов, включая:
Классы Assert, которые можно использовать, чтобы проверить условия в модульных тестах
Атрибуты инициализации и очистки для исполнения кода до или после модульных тестов, чтобы обеспечить определенное начальное и конечное состояние
Атрибут ExpectedException для проверки того, что определенный тип исключения возникает во время исполнения модульного теста
Класс TestContext, который хранит данные для модульных тестов, например, подключение данных для тестов, управляемых данными, и сведения, необходимо для выполнения модульных тестов для веб-служб ASP.NET
Дополнительные сведения см. в разделе Microsoft.VisualStudio.TestTools.UnitTesting.
TestClassAttribute: во время создания модульного теста TestClassAttribute включается в тестовый файл, чтобы показать, что данный конкретный класс может включать методы, помеченные атрибутом [TestMethod()]. Без атрибута TestClassAttribute методы теста пропускаются.
Тестовый класс может наследовать методы от другого тестового класса, входящего в ту же сборку. Это означает, что можно создавать методы теста в базовом тестовом классе и затем использовать их в производных тестовых классах.
Дополнительные сведения см. в разделе TestClassAttribute.
TestContext: во время создания модульных тестов переменная testContextInstance включается для каждого тестового класса. В свойствах класса TestContext хранятся сведения о текущем тесте. Дополнительные сведения см. в разделе TestContext.
Нижняя часть файла
На рисунке ниже показан нижний фрагмент кода, создаваемого в ходе пошаговой процедуры, который включает раздел "Дополнительные атрибуты теста", атрибут TestMethod и логику метода, включающего инструкцию Assert.
Дополнительные атрибуты теста: разверните этот раздел, чтобы просмотреть закомментированные методы, которые могут использоваться для включения инициализации и очистки с помощью указанных ниже атрибутов.
[ClassInitialize()] Используйте ClassInitialize для выполнения кода до выполнения первого теста в классе.
[ClassCleanUp()] Используйте ClassCleanup для выполнения кода после завершения выполнения всех тестов в классе.
[TestInitialize()] Используйте TestInitialize для выполнения кода до выполнения каждого теста.
[TestCleanUp()] Используйте TestCleanUp для выполнения кода после завершения выполнения каждого теста.
Создайте методы, помеченные атрибутом [ClassInitialize()] или [TestInitialize()], для подготовки аспектов среды, предназначенной для выполнения теста. Целью является установка известного состояния для выполнения модульного теста. Например, метод [ClassInitialize()] или [TestInitialize()] можно использовать для копирования, изменения или создания определенных файлов данных, используемых тестом.
Создайте методы, помеченные атрибутом [ClassCleanup()] или [TestCleanUp()], для возврата среды в известное состояние после завершения выполнения теста. Это может означать удаление файлов из папок или возврат базы данных в известное состояние. Примером является возврат складской базы данных в исходное состояние после тестирования метода, используемого в приложении ввода заказа.
Примечание
Рекомендуется включать код очистки в метод [TestCleanup()] или [ClassCleanup()], но не в метод завершения.Исключения, возникающие в методе завершения, не перехватываются и могут привести к непредсказуемым результатам.
TestMethodAttribute: во время создания модульного теста каждый метод модульного теста помечается атрибутом [TestMethod()]. Без этого атрибута модульный тест не будет выполняться. Дополнительные сведения об атрибуте TestMethod см. в разделе TestMethodAttribute.
Логика метода теста, включая оператор Assert: Каждый создаваемый модульный тест содержит пустые переменные и оператор-заполнитель Assert. Оператор-заполнитель Assert по умолчанию — это, как правило, оператор Assert.Inconclusive. Чтобы придать тесту содержательности, необходимо инициализировать переменные и заменить заполнитель соответствующим оператором Assert.
В данном примере мы оставили метод модульного теста CreditTest в его первоначальном состоянии после создания, включая инструкции TODO. Однако мы инициализировали переменные и заменили оператор Assert в методе теста DebitTest. Инструкции TODO являются напоминанием, что может понадобиться инициализировать данные строки кода.
Примечание
Содержимое методов теста может отличаться, в зависимости от типа модульного теста и характеристик тестируемого метода.
Примечание. Правила именования переменных. Средства тестирования Visual Studio при создании модульных тестов используют правила именования переменных. Например, имя файла модульного теста получается путем соединения слова "Test" с именем файла, содержащего тестируемый код; в нашем примере это "BankAccountTest.cs". Имена тестовых классов и методов также формируются с использованием значений по умолчанию. Эти значения можно изменить в диалоговом окне Параметры создания тестов. Чтобы открыть это окно, щелкните Параметры в диалоговом окне Создание модульных тестов.
Элементы, добавляемые к решению
В данном разделе описываются прочие файлы, помимо файла модульного теста, которые создаются в Пошаговое руководство. Создание и запуск модульных тестов.
Примечание
Какие именно файлы создаются по умолчанию во время создания модульного теста, зависит от параметров тестового проекта.Чтобы изменить эти параметры, щелкните Инструменты и затем выберите пункт Параметры.В диалоговом окне Параметры разверните узел Инструменты тестирования, а затем щелкните Тестовый проект.
На рисунке ниже показан обозреватель решений после создания модульного теста для нашего примера проекта.
Элементы решения: элементы решения включают два файла:
Local.testsettings: эти параметры определяют, как выполняются локальные тесты, в ходе которых не собираются диагностические данные.
Bank.vsmdi: данный файл включает сведения о списках тестов, имеющихся в решении, и заполняет данными окно редактора списка тестов.
TraceAndTestImpact.testsettings: эти параметры определяют, как выполняются локальные тесты, в ходе которых собирается определенный набор диагностических данных.
Тестовый проект: содержит остальные файлы, необходимые для модульных тестов.
Свойства тестового проекта: содержит файл AssemblyInfo.cs, в котором содержатся параметры построения проекта.
Ссылки тестового проекта: содержит ссылки, необходимые для выполнения модульных тестов. При создании модульного теста из существующего кода необходимые ссылки включаются. Однако вы можете добавить ссылки, чтобы настроить свои тесты.
Файл модульного теста: это файл модульного теста, описываемого в первом разделе данной статьи. Для каждого класса, подвергаемого тестированию, в тестовом проекте создается файл модульного теста. В данном примере оба тестируемых метода принадлежат одному классу. Следовательно, создан только один файл тестового класса — BankAccountTest.cs.
См. также
Ссылки
Microsoft.VisualStudio.TestTools.UnitTesting
Основные понятия
Создание и запуск модульных тестов для существующего кода
Модульные тесты для универсальных методов
Модульные тесты для веб-служб ASP.NET
Модульные тесты для частных, внутренних и дружественных методов