Как тестировать код в Visual Studio 2019

Обновлено: 05.07.2024

Убедитесь, что ваш код работает должным образом, создав и запустив модульные тесты. Это называется модульным тестированием, потому что вы разбиваете функциональность вашей программы на отдельные тестируемые варианты поведения, которые вы можете тестировать как отдельные модули. Visual Studio Test Explorer предоставляет гибкий и эффективный способ запуска модульных тестов и просмотра их результатов в Visual Studio. Visual Studio устанавливает платформы модульного тестирования Майкрософт для управляемого и машинного кода. Используйте среду модульного тестирования, чтобы создавать модульные тесты, запускать их и сообщать о результатах этих тестов. Повторно запускайте модульные тесты при внесении изменений, чтобы проверить, правильно ли работает ваш код. Visual Studio Enterprise может делать это автоматически с помощью Live Unit Testing, который обнаруживает тесты, затронутые вашими изменениями кода, и запускает их в фоновом режиме по мере ввода.

Модульное тестирование оказывает наибольшее влияние на качество кода, когда оно является неотъемлемой частью рабочего процесса разработки программного обеспечения. Как только вы пишете функцию или другой блок кода приложения, создавайте модульные тесты, которые проверяют поведение кода в ответ на стандартные, граничные и неправильные случаи ввода данных, а также проверяют любые явные или неявные предположения, сделанные кодом. . При разработке через тестирование модульные тесты создаются до написания кода, поэтому модульные тесты используются как в проектной документации, так и в функциональных спецификациях.

Test Explorer также может запускать сторонние платформы модульного тестирования и платформы с открытым исходным кодом, в которых реализованы дополнительные интерфейсы Test Explorer. Многие из этих платформ можно добавить с помощью диспетчера расширений Visual Studio и галереи Visual Studio. Дополнительные сведения см. в разделе Установка сторонних платформ модульного тестирования.

Начать

Введение в модульное тестирование, которое поможет вам непосредственно приступить к написанию кода, см. в одной из следующих тем:

Пример решения MyBank

Решение MyBank

 Решение MyBank 2019

 Решение MyBank 2022

Наша первая попытка разработки приложения MyBank включает компонент учетных записей, представляющий отдельный счет и его транзакции в банке, а также компонент базы данных, предоставляющий функциональные возможности для агрегирования и управления отдельными счетами.

Мы создаем решение MyBank, содержащее два проекта:

Наша первая попытка разработки проекта Accounts содержит класс для хранения основной информации об учетной записи, интерфейс, определяющий общую функциональность любого типа учетной записи, например ввод и вывод активов из учетной записи, и класс, производный от интерфейс, представляющий расчетный счет. Мы начинаем проекты Accounts с создания следующих исходных файлов:

AccountInfo.cs определяет основную информацию об учетной записи.

IAccount.cs определяет стандартный интерфейс IAccount для учетной записи, включая методы ввода и вывода активов из учетной записи и получения баланса учетной записи.

CheckingAccount.cs содержит класс CheckingAccount, реализующий интерфейс IAccount для текущего счета.

Из опыта мы знаем, что при снятии средств с расчетного счета необходимо убедиться, что снимаемая сумма меньше остатка на счете. Поэтому мы переопределяем метод IAccount.Withdraw в CheckingAccount методом, который проверяет это условие. Метод может выглядеть следующим образом:

Теперь, когда у нас есть код, пришло время его тестирования.

Создание проекта модульного тестирования и заготовок модульного теста

В окне редактора кода щелкните правой кнопкой мыши и выберите "Создать модульные тесты" в контекстном меню.

В окне редактора просмотрите контекст меню

В окне редактора откройте контекстное меню

В окне редактора откройте контекстное меню

Нажмите «ОК», чтобы принять значения по умолчанию для создания ваших модульных тестов, или измените значения, используемые для создания и названия проекта модульного теста и модульных тестов. Вы можете выбрать код, который по умолчанию добавляется к методам модульного тестирования.

Диалоговое окно

 Диалоговое окно

Заглушки модульного теста создаются в новом проекте модульного теста для всех методов класса.

Созданы модульные тесты

 Модульные тесты созданы

 Модульные тесты созданы

Теперь давайте перейдем к написанию тестов, чтобы сделать ваш модульный тест более осмысленным, а также к дополнительным модульным тестам, которые вы можете добавить для тщательного тестирования своего кода.

Создайте проект модульного тестирования и модульные тесты вручную

Проект модульного тестирования обычно отражает структуру одного проекта кода. В примере с MyBank вы добавляете в решение MyBanks два проекта модульного тестирования с именами AccountsTests и BankDbTests. Имена тестовых проектов произвольны, но рекомендуется принять стандартное соглашение об именах.

Чтобы добавить проект модульного тестирования в решение:

В диалоговом окне "Новый проект" разверните узел "Установлено", выберите язык, который вы хотите использовать для своего тестового проекта, а затем выберите "Тест".

Чтобы использовать одну из платформ модульного тестирования Майкрософт, выберите Проект модульного тестирования из списка шаблонов проектов. В противном случае выберите шаблон проекта платформы модульного тестирования, который вы хотите использовать. Чтобы протестировать проект Accounts из нашего примера, вы должны назвать его AccountsTests .

Не все сторонние платформы модульного тестирования и платформы модульного тестирования с открытым исходным кодом предоставляют шаблон проекта Visual Studio. Обратитесь к рамочному документу для получения информации о создании проекта.

Введите test в поле поиска шаблона проекта, чтобы найти шаблон проекта модульного тестирования для платформы тестирования, которую вы хотите использовать. (В примерах в этом разделе мы используем MSTest.)

На следующей странице дайте название проекту. Чтобы протестировать проект Accounts из нашего примера, вы можете назвать его AccountsTests .

В проекте модульного тестирования добавьте ссылку на тестируемый проект кода, в нашем примере — на проект Accounts.

Чтобы создать ссылку на проект кода:

В проекте модульного теста в обозревателе решений щелкните правой кнопкой мыши узел "Ссылки" или "Зависимости" и выберите "Добавить ссылку на проект" или "Добавить ссылку", в зависимости от того, что доступно.

В диалоговом окне "Диспетчер ссылок" откройте узел "Решение" и выберите "Проекты". Выберите имя проекта кода и закройте диалоговое окно.

Каждый проект модульного тестирования содержит классы, которые отражают имена классов в проекте кода. В нашем примере проект AccountsTests будет содержать следующие классы:

Класс AccountInfoTests содержит методы модульного тестирования для класса AccountInfo в проекте Accounts

Класс CheckingAccountTests содержит методы модульного тестирования для класса CheckingAccount.

Напишите свои тесты

Используемая вами среда модульного тестирования и Visual Studio IntelliSense помогут вам написать код для модульных тестов для проекта кода. Для запуска в обозревателе тестов большинство платформ требуют добавления определенных атрибутов для определения методов модульного тестирования. Платформы также предоставляют способ — обычно с помощью утверждений или атрибутов метода — указать, прошел ли метод тестирования или нет. Другие атрибуты определяют необязательные методы установки, которые выполняются при инициализации класса и перед каждым методом тестирования, а также методы разрыва, которые запускаются после каждого метода тестирования и перед уничтожением класса.

Шаблон AAA (Arrange, Act, Assert) — это распространенный способ написания модульных тестов для тестируемого метода.

Раздел Arrange метода модульного тестирования инициализирует объекты и устанавливает значение данных, которые передаются тестируемому методу.

Раздел Act вызывает тестируемый метод с упорядоченными параметрами.

Дополнительные сведения о платформах модульного тестирования Майкрософт см. в одном из следующих разделов:

Установить время ожидания для модульных тестов

Если вы используете платформу MSTest, вы можете использовать TimeoutAttribute, чтобы установить время ожидания для отдельного метода тестирования:

Чтобы установить максимально допустимое время ожидания:

Запуск тестов в обозревателе тестов

При создании тестового проекта тесты отображаются в обозревателе тестов. Если обозреватель тестов не отображается, выберите «Тест» в меню Visual Studio, выберите «Windows», а затем выберите «Обозреватель тестов» (или нажмите Ctrl + E, T).

Проводник модульных тестов

 Обозреватель модульных тестов

 Обозреватель модульных тестов

По мере запуска, написания и повторного запуска тестов обозреватель тестов может отображать результаты в группах "Неудачные тесты", "Пройденные тесты", "Пропущенные тесты" и "Не выполненные тесты". Вы можете выбрать другую группу по параметрам на панели инструментов.

Вы также можете отфильтровать тесты в любом представлении, сопоставив текст в поле поиска на глобальном уровне или выбрав один из предопределенных фильтров. Вы можете запустить любой набор тестов в любое время. Результаты тестового прогона сразу видны на полосе «годен/не годен» в верхней части окна проводника. Подробная информация о результатах метода тестирования отображается при выборе теста.

Запуск и просмотр тестов

Панель инструментов обозревателя тестов помогает находить, упорядочивать и запускать интересующие вас тесты.

Выполнение тестов с панели инструментов обозревателя тестов

Запуск тестов из панели инструментов обозревателя тестов

Запуск тестов из панели инструментов обозревателя тестов

Вы можете выбрать «Выполнить все», чтобы запустить все тесты (или нажмите Ctrl + R, V), или выбрать «Выполнить», чтобы выбрать подмножество тестов для запуска (Ctrl + R, T). Выберите тест, чтобы просмотреть сведения об этом тесте на панели сведений о тесте. Выберите «Открыть тест» в контекстном меню (клавиатура: F12), чтобы отобразить исходный код выбранного теста.

Если у отдельных тестов нет зависимостей, препятствующих их запуску в любом порядке, включите параллельное выполнение тестов с помощью переключателя на панели инструментов. Это может заметно сократить время выполнения всех тестов.

Если у отдельных тестов нет зависимостей, препятствующих их запуску в любом порядке, включите параллельное выполнение тестов в меню настроек на панели инструментов. Это может заметно сократить время выполнения всех тестов.

Выполнять тесты после каждой сборки

Кнопка Описание
Выполнить после сборки
Для запуска модульных тестов после каждой локальной сборки выберите «Тест» в стандартном меню, а затем выберите «Выполнить тесты после сборки» на панели инструментов обозревателя тестов.

Для запуска модульных тестов после каждой сборки требуется выпуск Visual Studio 2017 Enterprise или Visual Studio 2019. В Visual Studio 2019 эта функция доступна в выпусках Community и Professional в дополнение к выпуску Enterprise.

Чтобы запускать модульные тесты после каждой локальной сборки, откройте значок настроек на панели инструментов обозревателя тестов и выберите "Выполнить тесты после сборки".

Отфильтровать и сгруппировать список тестов

Если у вас есть большое количество тестов, вы можете ввести их в поле поиска обозревателя тестов, чтобы отфильтровать список по указанной строке. Вы можете ограничить событие фильтра, выбрав его из списка фильтров.

Категории фильтра поиска

Категории фильтра поиска

Категории фильтра поиска

Кнопка Описание
Кнопка группы обозревателя тестов
Чтобы сгруппировать тесты по категории, нажмите кнопку «Группировать по».

В: Как отлаживать модульные тесты?

A: Используйте обозреватель тестов, чтобы начать сеанс отладки ваших тестов. Пошаговое выполнение кода с помощью отладчика Visual Studio позволяет легко перемещаться между модульными тестами и тестируемым проектом. Чтобы начать отладку:

В редакторе Visual Studio установите точку останова в одном или нескольких методах тестирования, которые вы хотите отладить.

Поскольку методы тестирования могут выполняться в любом порядке, установите точки останова во всех методах тестирования, которые вы хотите отлаживать.

В обозревателе тестов выберите методы тестирования, а затем выберите «Отладка выбранных тестов» в контекстном меню.

Подробнее об отладке модульных тестов.

В: Если я использую TDD, как мне сгенерировать код из моих тестов?

О. Используйте быстрые действия для создания классов и методов в коде проекта. Напишите оператор в тестовом методе, который вызывает класс или метод, который вы хотите сгенерировать, а затем откройте лампочку, которая появляется под ошибкой. Если вызывается конструктор нового класса, выберите в меню «Создать тип» и следуйте указаниям мастера, чтобы вставить класс в свой проект кода. Если вызывается метод, выберите «Создать метод» в меню IntelliSense.

Создать меню быстрого действия заглушки метода

Создать меню быстрого действия для заглушки метода

Создать меню быстрого действия для заглушки метода

В: Могу ли я создавать модульные тесты, которые используют несколько наборов данных в качестве входных данных для выполнения теста?

О: Да. Методы тестирования на основе данных позволяют тестировать диапазон значений с помощью одного метода модульного тестирования. Используйте атрибут DataSource для метода тестирования, который указывает источник данных и таблицу, содержащую значения переменных, которые вы хотите протестировать. В теле метода вы присваиваете значения строк переменным с помощью индексатора TestContext.DataRow[ ColumnName ].

Эти процедуры применяются только к методам тестирования, которые вы пишете с помощью платформы модульного тестирования Майкрософт для управляемого кода. Если вы используете другую платформу, обратитесь к документации по платформе, чтобы узнать об эквивалентной функциональности.

Например, предположим, что мы добавляем в класс CheckingAccount ненужный метод с именем AddIntegerHelper . AddIntegerHelper добавляет два целых числа.

Чтобы создать управляемый данными тест для метода AddIntegerHelper, мы сначала создаем базу данных Access с именем AccountsTest.accdb и таблицу с именем AddIntegerHelperData . Таблица AddIntegerHelperData определяет столбцы для указания первого и второго операндов сложения и столбец для указания ожидаемого результата. Мы заполняем ряд строк соответствующими значениями.

Атрибутивный метод запускается один раз для каждой строки в таблице. Обозреватель тестов сообщает о сбое теста для метода, если какая-либо из итераций не удалась. В области сведений о результатах теста для метода отображается метод статуса «годен/не годен» для каждой строки данных.

В: Могу ли я посмотреть, какая часть моего кода протестирована модульными тестами?

О: Да. Вы можете определить объем вашего кода, который фактически тестируется вашими модульными тестами, с помощью инструмента покрытия кода Visual Studio в Visual Studio Enterprise. Поддерживаются собственные и управляемые языки, а также все платформы модульного тестирования, которые можно запустить с помощью платформы модульного тестирования.

Вы можете выполнить покрытие кода для выбранных тестов или для всех тестов в решении. В окне результатов покрытия кода отображается процент блоков кода продукта, которые были проверены по строке, функции, классу, пространству имен и модулю.

Чтобы запустить покрытие кода для методов тестирования в решении, выберите «Тест» > «Анализ покрытия кода для всех тестов».

Результаты покрытия отображаются в окне "Результаты покрытия кода".

Результаты покрытия кода

Результаты покрытия кода

В: Могу ли я тестировать методы в своем коде, которые имеют внешние зависимости?

О: Да. Если у вас есть Visual Studio Enterprise, Microsoft Fakes можно использовать с методами тестирования, которые вы пишете, используя платформы модульного тестирования для управляемого кода.

Microsoft Fakes использует два подхода для создания замещающих классов для внешних зависимостей:

Заглушки создают замещающие классы, производные от родительского интерфейса целевого класса зависимостей. Методы-заглушки можно заменить общедоступными виртуальными методами целевого класса.

Оболочки используют инструментарий среды выполнения для перенаправления вызовов целевого метода на замену метода оболочки для невиртуальных методов.

В обоих подходах вы используете сгенерированные делегаты вызовов метода зависимости, чтобы указать поведение, которое вы хотите в тестовом методе.

В: Могу ли я использовать другие платформы модульного тестирования для создания модульных тестов?


< /p>

Создавайте, выполняйте и отлаживайте модульные тесты на выбранном вами языке и платформе тестирования.Богатый набор встроенных шаблонов проектов и сред тестирования поддерживают несколько платформ и упрощают начало работы.

Интеллектуальный тест

Значительно сократите усилия по созданию и поддержке модульных тестов для нового или существующего кода. Создавайте интересные значения ввода-вывода для своих методов и сохраняйте их в виде небольшого набора тестов с большим охватом кода. Автоматически развивайте их по мере развития вашего кода.



Тестирование модулей в реальном времени

Live Unit Testing автоматически запускает все затронутые модульные тесты в фоновом режиме и показывает покрытие вашего кода в реальном времени в Visual Studio. Когда вы изменяете свой код, Live Unit Testing позволяет узнать, покрываются ли ваши изменения кода существующими тестами или вам нужно написать новые тесты. Получайте ненавязчивые напоминания о написании новых тестов по мере ввода.

Обозреватель тестов

Используйте единое окно для организации, запуска и отладки теста, а также для просмотра результатов теста. Легко настраивайте непрерывное тестирование, автоматически запуская тесты после каждой сборки.

< бр />


Индикаторы тестирования CodeLens

Встроенное отображение результатов тестирования вашего кода. Проверяйте, запускайте, отлаживайте свои тесты и переходите к тестам прямо из редактора кода.

Анализ покрытия кода

Визуализируйте покрытие кода на уровне строк и блоков как для управляемых, так и для собственных приложений и создайте отчеты.


< /p>


Подделки

Используйте Visual Studio для определения и запуска модульных тестов, чтобы поддерживать работоспособность кода, обеспечивать покрытие кода и находить ошибки и сбои раньше, чем это сделают ваши клиенты. Чаще запускайте модульные тесты, чтобы убедиться, что ваш код работает правильно.

Создание модульных тестов

В этом разделе описывается, как создать проект модульного тестирования.

Откройте проект, который вы хотите протестировать, в Visual Studio.

В обозревателе решений выберите узел решения. Затем в верхней строке меню выберите «Файл» > «Добавить» > «Новый проект».

В диалоговом окне "Новый проект" найдите нужный проект модульного тестирования.

Разверните узел Установлено, выберите язык, который вы хотите использовать для своего тестового проекта, а затем выберите Тест.

Шаблон проекта модульного тестирования в Visual Studio 2022

Нажмите "Далее", выберите имя для тестового проекта и нажмите "Создать".

Шаблон проекта модульного тестирования в Visual Studio 2019

Нажмите "Далее", выберите имя для тестового проекта и нажмите "Создать".

Модульный тест шаблон проекта в Visual Studio 2017

Выберите имя для тестового проекта, например HelloWorldTests, и нажмите OK.

Проект добавлен в ваше решение.

Модульный тест проект в обозревателе решений

Модульный тест проект в обозревателе решений

В проекте модульного тестирования добавьте ссылку на проект, который вы хотите протестировать, щелкнув правой кнопкой мыши ссылки или зависимости и выбрав "Добавить ссылку" или "Добавить ссылку на проект".

Выберите проект, содержащий тестируемый код, и нажмите "ОК".

Добавить проект ссылка в Visual Studio

Добавить проект ссылка в Visual Studio

Добавить код в метод модульного тестирования.

Выполнить модульные тесты

Чтобы открыть обозреватель тестов, выберите «Тест» > «Обозреватель тестов» в верхней строке меню (или нажмите Ctrl + E, T).

Чтобы открыть обозреватель тестов, выберите «Тест» > «Windows» > «Обозреватель тестов» в верхней строке меню.

Запустите модульные тесты, нажав "Выполнить все" (или нажав Ctrl + R, V).

Выполнение модульных тестов в обозревателе тестов

Выполнение модульных тестов в обозревателе тестов

После завершения тестов зеленая галочка означает, что тест пройден. Красный значок "x" означает, что тест не пройден.

 Просмотрите результаты модульных тестов в обозревателе тестов

 Просмотрите результаты модульных тестов в обозревателе тестов

Обозреватель тестов можно использовать для запуска модульных тестов из встроенной среды тестирования (MSTest) или из сторонних сред тестирования. Вы можете группировать тесты по категориям, фильтровать список тестов, а также создавать, сохранять и запускать списки воспроизведения тестов. Вы также можете отлаживать тесты и анализировать их производительность и покрытие кода.

Просмотр результатов модульного тестирования в режиме реального времени (Visual Studio Enterprise)

Если вы используете платформу тестирования MSTest, xUnit или NUnit в Visual Studio 2017 или более поздней версии, вы можете просматривать результаты своих модульных тестов в реальном времени.

Включите динамическое модульное тестирование в меню "Тест", выбрав "Тестирование" > "Живое модульное тестирование" > "Начать".

Включить живое модульное тестирование

Начать динамическое модульное тестирование в Visual Studio 2019

Начать динамическое модульное тестирование в Visual Studio 2022

Просматривайте результаты тестов в окне редактора кода во время написания и редактирования кода.

Просмотреть результаты тестов

Просмотреть результаты тестов

Нажмите на индикатор результатов теста, чтобы просмотреть дополнительную информацию, например названия тестов, которые охватывают этот метод.

Выберите индикаторы результатов теста

Выберите индикаторы результатов теста

Дополнительную информацию о реальном модульном тестировании см. в разделе Живое модульное тестирование.

Использовать стороннюю тестовую среду

Вы можете запускать модульные тесты в Visual Studio, используя сторонние среды тестирования, такие как NUnit, Boost или Google C++ Testing Framework, в зависимости от вашего языка программирования. Чтобы использовать стороннюю платформу:

Используйте диспетчер пакетов NuGet, чтобы установить пакет NuGet для выбранной вами платформы.

(C++) В Visual Studio 2017 и более поздних версий уже включены некоторые платформы, такие как Google C++ Testing Framework. Дополнительные сведения см. в статье Написание модульных тестов для C/C++ в Visual Studio.

Чтобы добавить проект модульного тестирования:

Откройте решение, содержащее код, который вы хотите протестировать.

Щелкните правой кнопкой мыши решение в обозревателе решений и выберите "Добавить" > "Новый проект".

Выберите шаблон проекта модульного тестирования.

В этом примере выберите NUnit

Шаблон тестового проекта NUnit в Visual Studio 2022

Шаблон тестового проекта NUnit в Visual Studio 2019

Нажмите "Далее", назовите проект и нажмите "Создать".

Назовите проект и нажмите OK, чтобы создать его.

Шаблон проекта включает ссылки NuGet на NUnit и NUnit3TestAdapter.

 Зависимости NUnit NuGet в обозревателе решений

 Зависимости NUnit NuGet в обозревателе решений

Добавьте ссылку из тестового проекта на проект, содержащий код, который вы хотите протестировать.

Щелкните правой кнопкой мыши проект в обозревателе решений и выберите Добавить > Ссылка. (Вы также можете добавить ссылку из контекстного меню узла «Ссылки» или «Зависимости».)

Добавьте код в метод тестирования.

 Добавьте код в файл кода модульного теста

 Добавьте код в файл кода модульного теста

Запустите тест из обозревателя тестов или щелкните код теста правой кнопкой мыши и выберите "Выполнить тесты" (или Ctrl + R, T).

Чтобы определить, какая часть кода вашего проекта фактически тестируется закодированными тестами, такими как модульные тесты, вы можете использовать функцию покрытия кода Visual Studio. Чтобы эффективно защититься от ошибок, ваши тесты должны проверять или «покрывать» большую часть вашего кода.

Анализ покрытия кода можно применять как к управляемому (CLI), так и к неуправляемому (собственному) коду.

Покрытие кода — это вариант, когда вы запускаете методы тестирования с помощью обозревателя тестов. В таблице результатов показан процент кода, который был запущен в каждой сборке, классе и методе. Кроме того, редактор исходного кода показывает, какой код был протестирован.

Результаты покрытия кода с окрашиванием

Требования

Функция покрытия кода доступна только в выпуске Visual Studio Enterprise.

Анализ покрытия кода

  1. В меню "Тест" выберите "Анализ покрытия кода".

В меню "Тест" выберите "Анализ покрытия кода для всех тестов".

 Меню анализа покрытия кода в VS 2019

Вы также можете запустить покрытие кода из окна инструмента Test Explorer.

После выполнения тестов, чтобы увидеть, какие строки были выполнены, выберите «Показать раскраску покрытия кода» в окне «Результаты покрытия кода». По умолчанию код, покрываемый тестами, выделяется голубым цветом.

Чтобы изменить цвета или использовать жирный шрифт, выберите «Инструменты» > «Параметры» > «Среда» > «Шрифты и цвета» > «Показать настройки для: Текстовый редактор». В разделе "Элементы отображения" настройте параметры для элементов "Покрытие", например "Покрытие нетронутой области".

Шрифты и цвета покрытия кода

Если результаты показывают низкое покрытие, выясните, какие части кода не выполняются, и напишите дополнительные тесты для их покрытия. Команды разработчиков обычно стремятся к покрытию кода примерно на 80%. В некоторых ситуациях допустимо меньшее покрытие. Например, меньшее покрытие допустимо, если некоторый код создается из стандартного шаблона.

  • Отключить оптимизацию компилятора
  • Если вы работаете с неуправляемым (собственным) кодом, используйте отладочную сборку.
  • Создать файлы .pdb (символы) для каждой сборки

Если вы не получили ожидаемых результатов, см. раздел Устранение неполадок с покрытием кода.

Не забудьте снова запустить покрытие кода после обновления кода. Результаты покрытия и окрашивание кода не обновляются автоматически после изменения кода или запуска тестов.

Отчет в блоках или строках

Покрытие кода считается в блоках. Блок — это фрагмент кода, имеющий ровно одну точку входа и выхода. Если поток управления программы проходит через блок во время тестового прогона, этот блок считается пройденным. Количество использований блока не влияет на результат.

Вы также можете отобразить результаты в строках, выбрав «Добавить/удалить столбцы» в заголовке таблицы. Некоторые пользователи предпочитают количество строк, потому что проценты больше соответствуют размеру фрагментов, которые вы видите в исходном коде. Длинный блок вычислений будет считаться одним блоком, даже если он занимает много строк.

Строка кода может содержать более одного блока кода. Если это так, и тестовый прогон выполняет все блоки кода в строке, он считается одной строкой. Если выполняются некоторые, но не все блоки кода в строке, это считается неполной строкой.

Управление результатами покрытия кода

В окне "Результаты покрытия кода" обычно отображается результат последнего запуска. Результаты будут различаться, если вы измените данные теста или каждый раз будете запускать только некоторые тесты.

Окно покрытия кода также можно использовать для просмотра предыдущих результатов или результатов, полученных на других компьютерах.

Можно объединить результаты нескольких запусков, например запусков, в которых используются разные тестовые данные.

Чтобы просмотреть предыдущий набор результатов, выберите его в раскрывающемся меню. В меню отображается временный список, который очищается при открытии нового решения.

Чтобы просмотреть результаты предыдущего сеанса, выберите «Импортировать результаты покрытия кода», перейдите в папку TestResults в своем решении и импортируйте файл .coverage.

Цвет покрытия может быть неправильным, если исходный код был изменен с момента создания файла .coverage.

Чтобы результаты можно было прочитать как текст, выберите Экспорт результатов покрытия кода. При этом будет создан удобочитаемый файл .coveragexml, который можно обработать с помощью других инструментов или легко отправить по почте.

Чтобы отправить результаты другому пользователю, отправьте файл .coverage или экспортированный файл .coveragexml. Затем они могут импортировать файл. Если у них одинаковая версия исходного кода, они могут увидеть выделение цветом покрытия.

Объединить результаты разных запусков

В некоторых ситуациях в вашем коде будут использоваться разные блоки в зависимости от тестовых данных. Поэтому вы можете объединить результаты разных запусков тестов.

Например, предположим, что при запуске теста с входными данными "2" вы обнаружите, что 50 % конкретной функции покрыто. Когда вы запускаете тест во второй раз с вводом «-2», вы видите в представлении раскраски покрытия, что остальные 50% функции покрыты. Теперь вы объединяете результаты двух тестовых прогонов, и в отчете и представлении цвета покрытия показано, что функция покрыта на 100 %.

Для этого используйте результаты покрытия кода слияния. Вы можете выбрать любую комбинацию последних запусков или импортированных результатов. Если вы хотите объединить экспортированные результаты, вы должны сначала импортировать их.

Используйте экспорт результатов покрытия кода, чтобы сохранить результаты операции слияния.

Ограничения при слиянии

Если вы объединяете данные о покрытии из разных версий кода, результаты отображаются отдельно, но не объединяются. Чтобы получить полностью объединенные результаты, используйте ту же сборку кода, изменив только тестовые данные.

Если вы объединяете файл результатов, который был экспортирован, а затем импортирован, вы можете просматривать результаты только по строкам, а не по блокам. Используйте команду «Добавить/удалить столбцы», чтобы отобразить данные строки.

Исключить элементы из результатов покрытия кода

Возможно, вы захотите исключить определенные элементы своего кода из оценок покрытия, например, если код создается на основе текстового шаблона. Добавьте атрибут System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute к любому из следующих элементов кода: class, struct, method, property, set или getter свойства, event.

Исключение класса не исключает его производных классов.

Исключить элементы из собственного кода C++

Чтобы исключить неуправляемые (собственные) элементы в коде C++:

Используйте следующие макросы:

ExcludeFromCodeCoverage( ExclusionName , L" FunctionName ");

ExcludeSourceFromCodeCoverage( ExclusionName , L" SourceFilePath ");

ExclusionName — любое уникальное имя.

FunctionName – это полное имя функции. Он может содержать подстановочные знаки. Например, чтобы исключить все функции класса, напишите MyNamespace::MyClass::*

SourceFilePath – это локальный или UNC-путь файла .cpp. Он может содержать подстановочные знаки. В следующем примере исключаются все файлы в определенном каталоге: \\MyComputer\Source\UnitTests\*.cpp

Поместите вызовы макросов исключения в глобальное пространство имен, а не в какое-либо пространство имен или класс.

Исключения можно поместить либо в файл кода модульного теста, либо в файл кода приложения.

Включить или исключить дополнительные элементы

Анализ покрытия кода выполняется только для загруженных сборок, для которых файл .pdb доступен в том же каталоге, что и .dll или . exe файл. Поэтому в некоторых случаях вы можете расширить набор включенных сборок, получив копии соответствующих файлов .pdb.

Анализ покрытия кода в Azure Pipelines

Когда вы возвращаете свой код, ваши тесты запускаются на сервере сборки вместе с тестами других членов команды. Полезно анализировать покрытие кода в Azure Pipelines, чтобы получить самую актуальную и полную картину покрытия во всем проекте. Сюда также входят автоматизированные системные тесты и другие закодированные тесты, которые обычно не выполняются на машинах для разработки.

Анализ покрытия кода из командной строки

Чтобы запускать тесты из командной строки, используйте vstest.console.exe. Покрытие кода — это параметр утилиты vstest.console.exe.

Запустите командную строку разработчика для Visual Studio:

В меню "Пуск" Windows выберите Visual Studio 2017 > Командная строка разработчика для VS 2017.

В меню "Пуск" Windows выберите Visual Studio 2019 > Командная строка разработчика для VS 2019.

В командной строке выполните следующую команду:

Устранение неполадок

Если вы не видите результаты покрытия кода, вам может помочь статья Устранение неполадок покрытия кода.

Читайте также: