Настройка и использование Live Unit Testing
При разработке приложения Live Unit Testing автоматически запускает все затронутые модульные тесты в фоновом режиме и отображает результаты и покрытие кода в режиме реального времени. При изменении кода Live Unit Testing предоставляет отзывы о том, как изменения повлияли на существующие тесты и о том, охватывает ли добавленный новый код одним или несколькими существующими тестами. Этот отзыв напоминает вам писать модульные тесты при исправлении ошибок или добавлении новых функций.
Используемая для тестирования функция Live Unit Testing сохраняет данные о состоянии тестов. Благодаря этому Live Unit Testing обеспечивает высокую производительность наряду с динамическим выполнением тестов при изменении кода.
Live Unit Testing доступен только в выпуске Enterprise Visual Studio для проектов, предназначенных для .NET Core или платформа .NET Framework.
Поддерживаемые тестовые платформы
Функция Live Unit Testing работает на трех известных платформах модульного тестирования, приведенных в таблице ниже. В ней также приведены сведения о минимальной поддерживаемой версии адаптеров и платформ. Платформы модульного тестирования доступны на сайте NuGet.org.
Платформа тестирования | Минимальная версия адаптера Visual Studio | Минимальная версия платформы |
---|---|---|
xUnit.net | xunit.runner.visualstudio версии 2.2.0-beta3-build1187 | xunit 1.9.2 |
NUnit | NUnit3TestAdapter версии 3.5.1 | NUnit версии 3.5.0 |
MSTest | MSTest.TestAdapter 1.1.4-preview | MSTest.TestFramework 1.0.5-preview |
Если у вас есть старые тестовые проекты на основе MSTest, ссылающиеся на Microsoft.VisualStudio.QualityTools.UnitTestFramework, и вы не хотите переходить к новым пакетам NuGet MSTest, обновите до Visual Studio 2019 или Visual Studio 2017.
В некоторых случаях может потребоваться явно восстановить пакеты NuGet, на которые ссылается проект Live Unit Testing для работы. В этом случае у вас есть два варианта.
- Восстановите, выполнив явную сборку решения. Выберите "Сборка>перестроения решения" в меню Visual Studio верхнего уровня.
- Восстановление пакетов в решении. Щелкните решение правой кнопкой мыши и выберите " Восстановить пакеты NuGet".
Настройка
При первом запуске Live Unit Testing для решения мастер установки позволяет настроить способ создания и запуска тестов Live Unit Testing.
При остановке Live Unit Testing можно также открыть мастер установки, перейдя в раздел "Тестирование>live Unit Testing Configure Live Unit Testing>" для решения.
При запуске Live Unit Testing создается рабочая область, которая является копией исходного репозитория. Затем Live Unit Testing применяет любые несохраненные изменения, внесенные в Visual Studio в рабочую область, выполняет сборку, выполняет тестовый запуск и сообщает о последнем охвате кода.
Первое, что необходимо настроить с помощью мастера, заключается в том, где должны быть скопированы файлы и где они должны быть скопированы.
Корневой каталог репозитория
Корневой каталог репозитория указывает папку, которая будет скопирована для создания рабочей области Live Unit Testing. Это должна быть корневая папка репозитория, то есть она должна содержать все источники, двоичные файлы и средства. В случаях, когда файл решения отсутствует в корневом каталоге репозитория, может потребоваться изменить корневой каталог репозитория.
Корневой каталог рабочей области
Корневой каталог рабочей области указывает папку, в которой Live Unit Testing сохраняет клон репозитория. Следите за исключениями, указывающими на то, что путь слишком длинный. По умолчанию корневой каталог создается в домашней папке. Однако в качестве примера, если обычно необходимо создать репозиторий на диске C, корень рабочей области может быть изменен на что-то подобное C:\lut\Repo.
Указание исключенных файлов
Не все файлы должны быть скопированы в рабочую область Live Unit Testing. Все артефакты, созданные во время сборки, должны быть исключены из копирования, чтобы обычные сборки не влияли на сборки Live Unit Testing. Кроме того, обычная nuget restore
команда не должна мешать команде Live Unit Testing nuget restore
.
По умолчанию Live Unit Testing исключает один из двух шаблонов файлов:
- Для репозиториев Git файлы, указанные в файле gitignore , не копируются в рабочую область Live Unit Testing.
- Для репозиториев, отличных от Git, базовый список папок, таких как bin/ и obj/, не копируются в рабочую область Live Unit Testing.
Для более сложных репозиториев может потребоваться указать собственный файл пропуска. <Выберите параметр Custom (Настраиваемый>) в мастере. После нажатия кнопки "Далее" содержимое настраиваемого файла пропуска, созданного Live Unit Testing после завершения работы мастера. Это файл lutignore.
Примечание.
Для некоторых репозиториев Git требуется пользовательский файл lutignore, так как можно проверка файлы в репозиторий Git, которые также игнорируются файлом gitignore. Без пользовательского файла lutignore Live Unit Testing не копирует эти файлы, что может привести к сбоям сборки.
Структура файлов Lutignore
В файле lutignore используется тот же формат, что и файл gitignore . Он должен содержать правила, соответствующие папкам или файлам, созданным во время сборки, чтобы они не копировались в рабочую область. Для большинства шаблонов проектов по умолчанию достаточно следующего файла игнорировать:
[BB]IN
[OO]BJ
# WILL NOT COPY ANY BIN AND OBJ FOLDERS TO THE LIVE UNIT TESTING WORKSPACE
Если в репозитории есть одна папка сборки, вместо этого файл игнорируется:
[AA]RTIFACTS/
# WILL NOT COPY THE ARTIFACTS FOLDER TO THE LIVE UNIT TESTING WORKSPACE
Если репозиторий включает в папку сборки другие средства, эти средства следует исключить в наборе соответствующих шаблонов:
[AA]RTIFACTS/
![AA]RTIFACTS/TOOLS/
# WILL NOT COPY THE ARTIFACTS FOLDER TO THE LIVE UNIT TESTING WORKSPACE
# HOWEVER IT WILL COPY THE TOOLS SUBFOLDER THAT MIGHT CONTAIN TOOLS AND UTILITIES
Варианты сборки
Вторая часть страницы конфигурации мастера — это настройка параметров сборки:
- Создание PDF-файлов. Чтобы ускорить сборку, Live Unit Testing не создает PDOB-файлы во время сборки. Эти файлы символов позволяют переходить к трассировкам стека при возникновении сбоев теста.
- Сборка с помощью нескольких ядер ЦП. По умолчанию Live Unit Testing выполняет сборки с помощью нескольких ядер ЦП, что улучшает время сборки. Если компьютер замедляет работу или если решение не будет создано с помощью нескольких процессоров, не выбирайте этот параметр.
Параметры тестового запуска
Последняя часть страницы конфигурации мастера — настройка параметров тестового запуска:
- Время ожидания тестового случая: некоторые тесты могут занять много времени. Задание этого поля автоматически прерывается, если любой из тестов превышает определенную продолжительность времени. Тесты можно отменить автоматически.
- Использование нескольких процессоров. По умолчанию Live Unit Testing пытается использовать несколько процессоров для ускорения выполнения производительности. Если компьютер замедляет работу или если решение не может выполнять тесты параллельно, не выбирайте этот параметр. Например, эти сценарии могут произойти, если несколько тестов пытаются записывать и считывать данные из одного пути к файлам.
Дополнительная конфигурация
Настройте Live Unit Testing, выбрав "Параметры инструментов>" в строке меню Visual Studio верхнего уровня. В левой области диалогового окна "Параметры " выберите Live Unit Testing.
После включения Динамического модульного тестирования (см. статью "Пуск", "Приостанавливать" и "Остановить Live Unit Testing") можно также открыть диалоговое окно "Параметры динамического модульного тестирования", выбрав варианты тестового>динамического модульного тестирования.>
На следующем рисунке показаны параметры конфигурации Live Unit Testing, доступные в диалоговом окне.
С помощью этих параметров вы можете настроить следующее:
Будет ли функция Live Unit Testing приостанавливаться во время сборки и отладки решения.
Будет ли функция Live Unit Testing приостанавливаться, если заряд батареи системы опустится ниже установленного порогового значения.
Возможность удалять все сохраненные данные. Эта возможность полезна, если Live Unit Testing работает в непредсказуемом или неожиданном способе, что свидетельствует о том, что сохраненные данные повреждены.
Максимальный объем памяти, которую могут использовать процессы Live Unit Testing.
Уровень информации, записываемой функцией Live Unit Testing в окно Выходные данные.
Доступные значения: None (данные журналов не записываются), Error (записываются только сообщения об ошибках), Info (значение по умолчанию, записываются сообщения об ошибках и информационные сообщения) или Verbose (записываются все сведения).
Вы также можете отобразить подробные выходные данные в окне вывода Live Unit Testing, назначив значение 1 переменной среды уровня пользователя с именем
VS_UTE_DIAGNOSTICS
. Затем перезапустите Visual Studio.Чтобы записывать подробные сообщения журнала MSBuild из Live Unit Testing в файл, в качестве значения переменной среды уровня пользователя
LiveUnitTesting_BuildLog
задайте имя файла для хранения журнала.
Настройка сборки для Live Unit Testing
Для более сложных решений может потребоваться дополнительно настроить сборку. Например, во время тестового выполнения может потребоваться создать файлы перевода. Чтобы ускорить сборку, можно отключить сборку файла перевода с помощью Live Unit Testing. Это можно сделать, управляя файлами проекта.
Добавление переопределения Live Unit Testing
Если для решения требуются пользовательские шаги для создания инструментирования (Live Unit Testing), которые не требуются для неинструментной сборки, можно добавить код в проект или целевые файлы, которые проверка для BuildingForLiveUnitTesting
свойства и выполняют пользовательские действия по сборке до или после выполнения.
Например, можно написать следующий пример, чтобы добавить еще один целевой объект, выполняемый только для Live Unit Testing:
<Target Name="GenerateNuGetPackages" BeforeTargets="AfterBuild" Condition="'$(BuildingForLiveUnitTesting)' == 'true'">
<Exec Command='"$(MSBuildThisFileDirectory)..\tools\GenPac" '/>
</Target>
Свойство можно использовать BuildingForLiveUnitTesting
для отключения некоторых задач, которые не должны выполняться для тестовых сборок. Например, наборы <RunAnalyzers>false</RunAnalyzers>
Live Unit Testing для отключения анализаторов для тестов.
Зависимости тестов live Unit Testing
Возможно, не все файлы были скопированы, необходимые для выполнения тестов. Live Unit Testing создает отдельную папку, в которой выполняется тестирование. Это позволяет выполнять сборки во время выполнения тестов, но не все файлы из папки сборки копируются в тестовую папку.
Как правило, вы добавляете тестовые зависимости по одной из двух причин:
- Тесты зависят от файлов в исходном дереве. Например, тесты проверяют содержимое файлов resx или, возможно, считывают некоторые файлы конфигурации.
- Тесты зависят от некоторых библиотек, на которые они ссылаются. Например, тест запускает исполняемый файл, созданный как зависимость.
Примечание.
Тестовые зависимости должны существовать в каталоге, указанном в качестве корневого каталога в мастере установки.
В обоих случаях Live Unit Testing по умолчанию не копирует эти файлы для минимизации количества файлов, которые необходимо скопировать для выполнения теста. Эти файлы необходимо явно указать с помощью LiveUnitTestingTestDependency
свойства, если они необходимы для тестового запуска. Например, предположим, что у нас есть следующий макет:
SRC/
CONSOLE_UTILITY/
TEST_PROJECT/
ARTIFACTS/
CONSOLE_UTILITY/NET472/DEBUG/
TEST_PROJECT/NET472/DEBUG/
По умолчанию при сборке этих проектов с помощью Live Unit Testing он копируется Artifacts/Test_Project
только в тестовую папку. Чтобы добавить источники или console_utility в тестовую папку, добавьте следующий пример test_project.csproj
:
<LiveUnitTestingTestDependency Include=”$(RepoRoot)/Src/ConsoleUtility” />
<LiveUnitTestingTestDependency Include=”$(RepoRoot)/Artifacts/ConsoleUtility/net472/$(Configuration)/</LiveUnitTestingTestDependency” />
Запуск, приостановка и остановка
Чтобы включить Live Unit Testing, выберите "Тест>Live Unit Testing>Start" в меню Visual Studio верхнего уровня. После включения Live Unit Testing в меню Live Unit Testing параметр Запустить можно изменить на следующие параметры: Пауза и Остановить:
Пауза. Этот параметр позволяет временно приостановить работу функции Live Unit Testing.
При приостановке Динамического модульного тестирования визуализация покрытия не отображается в редакторе, но все собранные данные сохраняются. Чтобы возобновить Live Unit Testing, выберите "Продолжить " в меню Live Unit Testing . Live Unit Testing выполняет необходимую работу, чтобы догнать все изменения, сделанные во время приостановки и обновления глифов соответствующим образом.
Остановить. Этот параметр позволяет полностью остановить работу функции Live Unit Testing. Динамическое модульное тестирование не карта все собранные данные.
Если вы запускаете Live Unit Testing в решении, не включающем проект модульного теста, параметры приостановки и остановки отображаются в меню Live Unit Testing, но Live Unit Testing не запускается. В окне Вывод отображается сообщение, начинающееся со слов "No supported test adapters are referenced by this solution..." (Это решение не ссылается на поддерживаемые адаптеры тестов...).
Вы можете в любой момент временно или полностью остановить работу этой функции. Вы можете предпринять эти действия, например, если вы находитесь в середине рефакторинга и знаете, что ваши тесты будут нарушены в течение некоторого времени.
Добавление и исключение тестовых проектов и методов теста
При запуске Live Unit Testing откроется окно средства Live Unit Testing и предложит выбрать набор тестов, которые вы хотите протестировать с помощью Live Unit Testing.
Для небольших решений, где модульные тесты выполняются очень мало времени, выберите "Включить все тесты", что делает Live Unit Testing выполнять все тесты.
Для более крупных решений с множеством тестовых проектов можно управлять тем, какие проекты и отдельные методы в проекте участвуют в Live Unit Testing, изменив список воспроизведения. Например, если у вас есть решение с сотнями тестовых проектов, вы можете выбрать только целевой набор, который будет использоваться с этой функцией.
Вы выбираете, какую функцию live Unit Testing следует запустить, изменив список воспроизведения Live Unit Testing, функцию, которая работает так же, как списки воспроизведения в Обозреватель теста.
Существует несколько способов редактирования списка воспроизведения Live Unit Testing:
- Окно средства Динамического модульного тестирования
- Окно редактора кода
- Обозреватель решений
- Программно в тестовом коде
Live Unit Testing сохраняет состояние включения и исключения в качестве параметра пользователя и запоминает его при закрытии и повторном открытии решения.
Окно средства Динамического модульного тестирования
Редактор списка воспроизведения можно использовать для вкладки Live Unit Testing, чтобы включить или исключить проекты, пространства имен или классы из выполнения. Выберите "Изменить список воспроизведения" в окне инструментов.
Вы можете выбрать или очистить элементы представления дерева, чтобы включить или исключить тесты. Например, если вы проверка один тест, Live Unit Testing запускает его при изменениях. При выборе класса все тесты в этом классе выполняются и все новые тесты, добавленные в этот класс, также выполняются.
Окно редактора кода
Включать и исключать отдельные методы теста можно в окне редактора кода. Щелкните правой кнопкой мыши подпись или текст метода теста в окне редактора кода и выберите один из следующих параметров:
- Live Unit Testing>Включить <выбранный метод>
- Live Unit Testing>Исключить <выбранный метод>
- Live Unit Testing>Исключить все кроме <выбранный метод>
Обозреватель решений
Чтобы выбрать отдельные проекты в модульных тестах, выполните следующие действия после запуска Live Unit Testing:
- Щелкните правой кнопкой мыши решение в Обозреватель решений и выберите "Исключить live Unit Testing>", чтобы исключить все решение.
- Щелкните правой кнопкой мыши каждый тестовый проект, который требуется включить в тесты, и выберите Live Unit Testing>Include.
Программно в тестовом коде
Вы также можете отменить создание отчетов о покрытии в Live Unit Testing для некоторых методов, классов или структур, применив к ним атрибут ExcludeFromCodeCoverageAttribute.
Чтобы исключить отдельные методы из Live Unit Testing, используйте следующие атрибуты:
- xUnit:
[Trait("Category", "SkipWhenLiveUnitTesting")]
- NUnit:
[Category("SkipWhenLiveUnitTesting")]
- MSTest:
[TestCategory("SkipWhenLiveUnitTesting")]
Чтобы исключить целые сборки тестов из Live Unit Testing, используйте следующие атрибуты:
- xUnit:
[assembly: AssemblyTrait("Category", "SkipWhenLiveUnitTesting")]
- NUnit:
[assembly: Category("SkipWhenLiveUnitTesting")]
- MSTest:
[assembly: TestCategory("SkipWhenLiveUnitTesting")]
Просмотр визуализации протестированного объема
После включения Live Unit Testing обновляет каждую строку кода в редакторе Visual Studio, чтобы показать, охватывает ли код модульные тесты и выполняется ли тесты, охватывающие его.
На следующем рисунке показаны строки кода с передачей и неудачными тестами, а также строки кода, которые не охватываются тестами. Линии с зеленым "✓ охватываются только прохождением тестов. Линии с красным "x" охватываются одним или несколькими неудачными тестами. Линии с синим "➖" не охватываются никаким тестом.
Визуализация протестированного объема в Live Unit Testing обновляется сразу же после изменения кода в редакторе. При обработке изменений визуализация изменяется, чтобы указать, что данные не обновлены, добавив изображение круглого таймера под переданным, неудачным и не покрытым символами, как показано на следующем рисунке.
Получение информации о состоянии теста
Наведите указатель мыши на переданный или неудачный символ в окне кода, вы можете увидеть, сколько тестов попадает в эту строку. Чтобы просмотреть состояние отдельных тестов, выберите символ.
Кроме отображения имен и результатов тестов подсказка позволяет повторно запустить набор тестов или выполнить их отладку. Если выбрать один или несколько тестов в подсказке, можно также запустить или отладить только эти тесты. Это действие позволяет выполнять отладку тестов без необходимости покидать окно кода.
При отладке помимо наблюдения за любыми точками останова, которые вы уже установили, выполнение программы приостанавливается при выполнении Assert отладчика метода, возвращающего непредвиденный результат.
При наведении указателя мыши на неудачный тест в подсказке он расширяется, чтобы предоставить дополнительные сведения об ошибке, как показано на следующем рисунке. Чтобы перейти непосредственно к неудачной проверке, дважды щелкните его в подсказке.
Когда вы перейдете к неудачном тесту, Live Unit Testing визуально указывает в сигнатуре метода тесты, которые имеют:
- Передано (обозначено полуполным бобом вместе с зеленым "✓ ").
- Сбой (обозначается полуполным бобом вместе с красным "🞩").
- Не участвуют в Live Unit Testing (обозначены полузаполнимым киком вместе с синим "➖").
Методы nontest не идентифицируются с символом. На следующем изображении показаны все четыре типа методов.
Диагностика и устранение сбоев тестов
В окне непройденного теста вы можете с легкостью отладить код продукта, внести изменения и продолжить разработку приложения. Так как функция Live Unit Testing выполняется в фоновом режиме, ее не нужно останавливать и перезапускать при отладке, внесении правок и продолжении цикла.
Например, сбой теста, показанный на предыдущем изображении, был вызван неправильным предположением в методе теста, возвращаемом нефабетическими символами true
при передаче в System.Char.IsLower метод. После исправления метода теста все тесты должны выполниться успешно. Вам не нужно приостанавливать или останавливать работу Live Unit Testing.
Окно Live Unit Testing
Live Unit Testing, как и обозреватель тестов, предоставляет интерфейс, позволяющий выполнять и отлаживать тесты, а также анализировать их результаты. При включении Live Unit Testing состояние модульных тестов в обозревателе тестов сразу же обновляется. Вам не нужно явно запускать модульные тесты.
Если Live Unit Testing не включен или остановлен, Live Unit Testing отображает состояние модульных тестов при последнем запуске теста. После перезапуска Live Unit Testing для повторного выполнения тестов нужно изменить исходный код.
Вы можете запустить Live Unit Testing, выбрав "Тест>Live Unit Testing>Start" в меню Visual Studio верхнего уровня. Вы также можете открыть окно Live Unit Testing с помощью окна просмотра>другого>окна Windows Live Unit Testing.
Вы можете заметить в окне Live Unit Testing , что некоторые тесты исчезают. Например, при остановке и перезапуске Live Unit Testing окно Live Unit Testing исчезает все тесты, как показано на следующем рисунке.
Устаревшие результаты теста указывают на то, что тест не был частью последнего запуска Live Unit Test. Тесты выполняются только при обнаружении изменений в тесте или его зависимостях. Если изменения не изменяются, это позволяет избежать ненужных операций выполнения теста. В этом случае результат теста с серым цветом по-прежнему "до настоящего времени", хотя он не был частью последнего запуска.
Любой затемненный тест можно перезапустить, внеся изменения в код.
Между автоматическим выполнением с обновлением результатов теста с помощью функции Live Unit Testing и явным выполнением тестов в обозревателе тестов есть некоторые различия. Эти отличия описаны ниже.
- Выполнение или отладка тестов из окна "Тест" Обозреватель запускает обычные двоичные файлы. Live Unit Testing запускает инструментированные двоичные файлы.
- Live Unit Testing не создает новый домен приложения для выполнения тестов. Вместо этого он выполняет тесты из домена по умолчанию. При выполнении тестов в окне обозревателя тестов домен приложения создается.
- Функция Live Unit Testing выполняет тесты из разных сборок последовательно. В окне обозревателя тестов можно выбрать режим параллельного выполнения нескольких тестов.
Отмена выполнения тестов Live Unit Testing
Live Unit Testing постоянно выполняет тесты при внесении изменений в код. Если выполнение выполняется, и вы вносите дополнительные изменения в код, Live Unit Testing очереди еще один запуск, пока он ожидает завершения первого запуска.
При сохранении файлов Live Unit Testing отменяет первый запуск и немедленно планирует выполнение очереди. Этот процесс помогает в сценариях, когда первый запуск займет много времени.