Настройка и использование Live Unit Testing
В процессе разработки приложения функция Live Unit Testing автоматически выполняет все затронутые модульные тесты в фоновом режиме и отображает результаты и объем протестированного кода в реальном времени. При изменении кода эта функция предоставляет отчет о том, как внесенные изменения повлияли на имеющиеся и покрывается ли новый добавленный код одним или несколькими имеющимися тестами. За счет этого вы не забудете написать модульные тесты при исправлении ошибок или добавлении новых функций.
Функция Live Unit Testing доступна в проектах C# и Visual Basic, предназначенных для .NET Core или .NET Framework, в выпуске Visual Studio Enterprise.
Используемая для тестирования функция Live Unit Testing сохраняет данные о состоянии тестов. Благодаря этому Live Unit Testing обеспечивает высокую производительность наряду с динамическим выполнением тестов при изменении кода.
Поддерживаемые тестовые платформы
Функция 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.
В некоторых случаях, чтобы обеспечить работу Live Unit Testing, вам потребуется явным образом восстановить пакеты NuGet, на которые ссылается проект. Это можно сделать, выполнив сборку решения явным образом (в меню верхнего уровня Visual Studio выберите Сборка > Пересобрать решение) или восстановив пакеты в решении (щелкните решение правой кнопкой мыши и выберите пункт Восстановить пакеты NuGet).
Настройка
Чтобы настроить 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 запускаться автоматически после открытия решения.
Следует ли включить отладочный символ и создание комментариев к XML-документации.
Каталог, в котором хранятся сохраняемые данные.
Возможность удалять все сохраненные данные. Это полезно, когда функция Live Unit Testing работает непредсказуемо, что свидетельствует о вероятном повреждении хранимых данных.
Интервал, после которого истекает время ожидания тестового случая. По умолчанию используется значение 30 секунд.
Максимальное число процессов тестирования, создаваемых Live Unit Testing.
Максимальный объем памяти, которую могут использовать процессы Live Unit Testing.
Уровень информации, записываемой функцией Live Unit Testing в окно Выходные данные.
Доступные значения: None (данные журналов не записываются), Error (записываются только сообщения об ошибках), Info (значение по умолчанию, записываются сообщения об ошибках и информационные сообщения) или Verbose (записываются все сведения).
Можно также отобразить подробные выходные данные в окне Выходные данные в Live Unit Testing, задав для переменной среды уровня пользователя VS_UTE_DIAGNOSTICS значение 1 и перезапустив Visual Studio.
Чтобы записывать подробные сообщения журнала MSBuild из Live Unit Testing в файл, в качестве значения переменной среды уровня пользователя LiveUnitTesting_BuildLog задайте имя файла для хранения журнала.
Запуск, приостановка и остановка
Чтобы включить 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 в решении, не содержащем проект модульного теста, параметры Пауза и Остановить отображаются в меню Live Unit Testing, но сама эта функция не запускается. В окне Вывод отображается сообщение, начинающееся со слов "No supported test adapters are referenced by this solution. " (Это решение не ссылается на поддерживаемые адаптеры тестов. ).
Вы можете в любой момент временно или полностью остановить работу этой функции. Это можно сделать, например, если вы выполняете рефакторинг и знаете, что некоторое время тесты не будут работать.
Просмотр визуализации протестированного объема
После включения функция Live Unit Testing обновляет каждую строку кода в редакторе Visual Studio, чтобы показать, охватывают ли модульные тесты написанный код и завершились ли они успешно. На следующем изображении показаны строки кода с выполненными тестами и тестами, завершившимися сбоем, а также строки кода, не входящие в протестированный объем. Строки с зеленым значком "✓" прошли все тесты, строки с красным значком "x" не прошли один или несколько тестов, а строки с синим значком "➖" не охвачены ни одним из тестов.
Визуализация протестированного объема в Live Unit Testing обновляется сразу же после изменения кода в редакторе. Во время обработки правок визуализация изменяется, указывая, что данные не обновлены. В этом случае под символами успешного выполнения, сбоя и символом непротестированного объема появляется круглый значок таймера, как показано на изображении ниже.
Получение информации о состоянии теста
Наведя указатель мыши на символ удачного или неудачного выполнения в окне кода, вы можете увидеть, сколько тестов выполнялось в этой строке. Чтобы просмотреть данные о состоянии отдельных тестов, выберите символ:
Кроме отображения имен и результатов тестов подсказка позволяет повторно запустить набор тестов или выполнить их отладку. Если в подсказке выбрать один или несколько тестов, можно также запустить или выполнить отладку только для них. Это позволяет отлаживать тесты, оставаясь в окне с кодом. Помимо возможности отслеживания всех настроенных точек останова, при отладке вы также можете запрограммировать приостановку, когда отладчик выполняет метод Assert, возвращающий непредвиденный результат.
Если навести указатель мыши на непройденный тест в подсказке, она развернется. Здесь вы можете просмотреть дополнительные сведения, как показано на следующем рисунке: Чтобы перейти непосредственно к непройденному тесту, дважды щелкните его в подсказке.
При переходе к непройденному тесту Live Unit Testing отображает в сигнатуре метода тесты, которые:
- выполнены успешно (наполовину полная колба со значком "✓" зеленого цвета);
- не удалось выполнить (наполовину полная колба со значком "🞩" красного цвета);
- не обрабатываются Live Unit Testing (наполовину полная колба со значком "➖" синего цвета).
Невключенные в тестирование методы теста не обозначаются значком. На следующем изображении показаны все четыре типа методов.
Диагностика и устранение сбоев тестов
В окне непройденного теста вы можете с легкостью отладить код продукта, внести изменения и продолжить разработку приложения. Так как функция Live Unit Testing выполняется в фоновом режиме, ее не нужно останавливать и перезапускать при отладке, внесении правок и продолжении цикла.
Например, сбой теста, показанный на предыдущем изображении, вызван неверным предположением в методе теста о том, что при передаче в метод System.Char.IsLower неалфавитных символов возвращается значение true . После исправления метода теста все тесты должны выполниться успешно. Вам не нужно приостанавливать или останавливать работу Live Unit Testing.
Обозреватель тестов
Обозреватель тестов предоставляет интерфейс, позволяющий выполнять и отлаживать тесты, а также анализировать их результаты. Функция 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
Live Unit Testing, как и обозреватель тестов, предоставляет интерфейс, позволяющий выполнять и отлаживать тесты, а также анализировать их результаты. При включении Live Unit Testing состояние модульных тестов в обозревателе тестов сразу же обновляется. Вам не нужно явно запускать модульные тесты. При отключении или остановке Live Unit Testing обозреватель тестов отображает состояние модульных тестов при их последнем запуске. После перезапуска 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 — инструментированные двоичные файлы.
- При выполнении тестов функция Live Unit Testing не создает домен приложения, а использует домен по умолчанию. При выполнении тестов в окне обозревателя тестов домен приложения создается.
- Функция Live Unit Testing выполняет тесты из разных сборок последовательно. В окне обозревателя тестов можно выбрать режим параллельного выполнения нескольких тестов.
Крупные решения
Если решение содержит 10 или более проектов, в Visual Studio отобразится следующее диалоговое окно при выполнении таких действий:
- запуск Live Unit Testing без сохраненных данных;
- выбор элементов Инструменты > Параметры > Live Unit Testing > Удаление хранимых данных.
В диалоговом окне выводится предупреждение о том, что динамическое выполнение большого количества тестов в крупных проектах может значительно ухудшить производительность. Если нажать кнопку ОК, Live Unit Testing выполнит все тесты в решении. Если нажать кнопку Отменить, можно выбрать тесты для выполнения. Подробные сведения см. в следующем разделе.
Добавление и исключение тестовых проектов и методов теста
В решениях с большим количеством тестовых проектов вы можете контролировать, какие проекты и отдельные методы в проекте могут использоваться в функции Live Unit Testing. Например, если у вас есть решение с сотнями тестовых проектов, вы можете выбрать только целевой набор, который будет использоваться с этой функцией. Это можно сделать несколькими способами в зависимости от того, следует ли исключить все тесты в проекте или решении, включить или исключить большую часть тестов либо исключить отдельные тесты. Функция Live Unit Testing сохраняет состояние включения или исключения и запоминает его после закрытия и повторного открытия решения.
Исключение всех тестов в проекте или решенииЧтобы выбрать отдельные проекты в модульных тестах, запустите Live Unit Testing и выполните следующие действия:
- В обозревателе решений щелкните решение правой кнопкой мыши и выберите Динамическое модульное тестирование > Исключить, чтобы исключить все решение.
- Щелкните правой кнопкой мыши каждый тестовый проект, который вы хотите добавить в тесты, и выберите Динамическое модульное тестирование > Включить.
Включать и исключать отдельные методы теста можно в окне редактора кода. В окне редактора кода щелкните сигнатуру метода теста правой кнопкой мыши и выберите один из следующих вариантов:
- Динамическое модульное тестирование > Включить <selected method>
- Динамическое модульное тестирование > Исключить <selected method>
- Динамическое модульное тестирование > Исключить все, кроме <selected method>
Вы также можете отменить создание отчетов о покрытии в Live Unit Testing для некоторых методов, классов или структур, применив к ним атрибут ExcludeFromCodeCoverageAttribute.
Чтобы исключить отдельные методы из Live Unit Testing, используйте следующие атрибуты:
- Для xUnit: [Trait("Category", "SkipWhenLiveUnitTesting")]
- Для NUnit: [Category("SkipWhenLiveUnitTesting")]
- Для MSTest: [TestCategory("SkipWhenLiveUnitTesting")]
Чтобы исключить целые сборки тестов из Live Unit Testing, используйте следующие атрибуты: