Live unit testing visual studio как установить
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Сведения о том, как создать, выполнить и настроить серию модульных тестов с помощью платформы модульных тестов Майкрософт для управляемого кода и обозревателя тестов в Visual Studio.
Пошаговое руководство. Создание и запуск модульных тестов для управляемого кода
Создайте проект для тестирования
Запустите Visual Studio.
В меню Файл выберите Создать > Проект.
Откроется диалоговое окно Новый проект .
Присвойте проекту имя Bank и нажмите кнопку ОК.
Будет создан проект Bank. Он отобразится в обозревателе решений, а его файл Program.cs откроется в редакторе кода.
[!NOTE] Если файл Program.cs не откроется в редакторе, дважды щелкните Program.cs в обозревателе решений, чтобы открыть его.
Запустите Visual Studio.
На начальном экране выберите Создать проект.
Назовите проект Bank и щелкните Далее.
Будет создан проект Bank. Он отобразится в обозревателе решений, а его файл Program.cs откроется в редакторе кода.
[!NOTE] Если файл Program.cs не откроется в редакторе, дважды щелкните Program.cs в обозревателе решений, чтобы открыть его.
Переименуйте файл в BankAccount.cs, щелкнув его правой кнопкой мыши и выбрав команду Переименовать в обозревателе решений.
В меню Сборка нажмите Построить решение (или нажмите клавиши CTRL + SHIFT + B).
Теперь у вас есть проект с методами, которые можно протестировать. В этой статье тестирование проводится на примере метода Debit . Метод Debit вызывается, когда денежные средства снимаются со счета.
Создание проекта модульного теста
В меню Файл выберите Добавить > Создать проект.
[!TIP] В обозревателе решений щелкните решение правой кнопкой мыши и выберите пункты Добавить > Создать проект.
В поле Имя введите BankTests , а затем нажмите кнопку ОК.
Проект BankTests добавляется в решение Банк.
[!NOTE] в Visual Studio 2019 версии 16.9 шаблон проекта MSTest имеет формат проекта модульного теста.
Назовите проект BankTests и щелкните Далее.
Проект BankTests добавляется в решение Банк.
В проекте BankTests добавьте ссылку на проект Банк.
В обозревателе решений щелкните Зависимости в проекте BankTests, а затем выберите в контекстном меню элемент Добавить ссылку или Добавить ссылку на проект.
В диалоговом окне Диспетчер ссылок разверните Проекты, выберите Решение и выберите элемент Банк.
Создание тестового класса
Создание тестового класса, чтобы проверить класс BankAccount . Можно использовать UnitTest1.cs, созданный в шаблоне проекта, но лучше дать файлу и классу более описательные имена.
Переименуйте файл и класс
- Чтобы переименовать файл, в обозревателе решений выберите файл UnitTest1.cs в проекте BankTests. В контекстном меню выберите команду Переименовать (или нажмите клавишу F2), а затем переименуйте файл в BankAccountTests.cs.
- Чтобы переименовать класс, выберите Да в открывшемся диалоговом окне, предлагающем также переименовать ссылки на элемент кода.
- Чтобы переименовать класс, поместите курсор в UnitTest1 в редакторе кода, щелкните правой кнопкой мыши и выберите команду Переименовать (или нажмите клавиши F2). Введите название BankAccountTests и нажмите клавишу ВВОД.
Файл BankAccountTests.cs теперь содержит следующий код:
Добавьте оператор using
Можно также добавить оператор using в класс, чтобы тестируемый проект можно было вызывать без использования полных имен. Вверху файла класса добавьте:
Требования к тестовому классу
Минимальные требования к тестовому классу следующие:
Атрибут [TestClass] является обязательным в любом классе, содержащем методы модульных тестов, которые необходимо выполнить в обозревателе тестов.
Каждый метод теста, предназначенный для запуска в обозревателе тестов, должен иметь атрибут [TestMethod] .
Можно иметь другие классы в проекте модульного теста, которые не содержат атрибута [TestClass] , а также иметь другие методы в тестовых классах, у которых атрибут — [TestMethod] . Можно вызывать эти другие классы и методы в методах теста.
Создание первого тестового метода
В этой процедуре мы напишем методы модульного теста для проверки поведения метода Debit класса BankAccount .
Существует по крайней мере три поведения, которые требуется проверить:
Метод создает исключение xref:System.ArgumentOutOfRangeException , если сумма по дебету превышает баланс.
Метод создает исключение xref:System.ArgumentOutOfRangeException, если сумма по дебету меньше нуля.
Если значение дебета допустимо, то метод вычитает сумму дебета из баланса счета.
[!TIP] Метод по умолчанию TestMethod1 можно удалять, так как он не используется в этом руководстве.
Создание метода теста
Первый тест проверяет, снимается ли со счета нужная сумма при допустимом размере кредита (со значением меньшим, чем баланс счета, и большим, чем ноль). Добавьте следующий метод в этот класс BankAccountTests :
Метод очень прост: он создает новый объект BankAccount с начальным балансом, а затем снимает допустимое значение. Он использует метод xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual%2A?displayProperty=nameWithType, чтобы проверить, что конечный баланс соответствует ожидаемому. Такие методы, как Assert.AreEqual , xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue%2A?displayProperty=nameWithType и другие, зачастую используются в модульном тестировании. Дополнительную концептуальную информацию о написании модульного теста см. в разделе Написание тестов.
Требования к методу теста
Метод теста должен удовлетворять следующим требованиям:
Он декорируется атрибутом [TestMethod] .
Он возвращает void .
Он не должен иметь параметров.
Сборка и запуск теста
В меню Сборка нажмите Построить решение (или нажмите клавиши CTRL + SHIFT + B).
Откройте Обозреватель тестов, выбрав Тест > Windows > Обозреватель тестов в верхней строке меню (или нажмите клавиши CTRL + E, T).
Выберите Запустить все, чтобы выполнить тест (или нажмите клавиши CTRL + R, V).
Во время выполнения теста в верхней части окна Обозреватель тестов отображается анимированная строка состояния. По завершении тестового запуска строка состояния становится зеленой, если все методы теста успешно пройдены, или красной, если какие-либо из тестов не пройдены.
В данном случае тест пройден не будет.
Выберите этот метод в обозревателе тестов для просмотра сведений в нижней части окна.
Исправление кода и повторный запуск тестов
Модульный тест обнаружил ошибку: сумма списания добавляется на баланс счета, вместо того чтобы вычитаться.
Повторный запуск теста
В обозревателе тестов выберите Запустить все, чтобы запустить тест повторно (или нажмите клавиши CTRL + R, V). Красно-зеленая строка становится зеленой, чтобы указать, что тест был пройден.
. moniker range="=vs-2022" . moniker-end
Использование модульных тестов для улучшения кода
В этом разделе рассматривается, как последовательный процесс анализа, разработки модульных тестов и рефакторинга может помочь сделать рабочий код более надежным и эффективным.
Мы создали тестовый метод для подтверждения того, что допустимая сумма правильно вычитается в методе Debit . Теперь проверим, что метод создает исключение xref:System.ArgumentOutOfRangeException, если сумма по дебету:
Создание и запуск новых методов теста
Создадим метод теста для проверки правильного поведения в случае, когда сумма по дебету меньше нуля:
Мы используем метод xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.ThrowsException%2A для подтверждения правильности созданного исключения. Этот метод приводит к тому, что тест не будет пройден, если не возникнет исключения xref:System.ArgumentOutOfRangeException. Если временно изменить тестируемый метод для вызова более общего исключения xref:System.ApplicationException при значении суммы по дебету меньше нуля, то тест работает правильно — то есть завершается неудачно.
Чтобы проверить случай, когда размер списания превышает баланс, выполните следующие действия:
Создать новый метод теста с именем Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange .
Скопировать тело метода из Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange в новый метод.
Присвоить debitAmount значение, превышающее баланс.
Выполните два теста и убедитесь, что они пройдены.
Еще раз проанализировав тестируемый метод BankAccount.Debit , можно заметить, что оба условных оператора используют конструктор ArgumentOutOfRangeException , который просто получает имя аргумента в качестве параметра:
Рефакторинг тестируемого кода
Затем изменим два условных оператора в методе Debit :
Рефакторинг тестовых методов
В этом случае метод Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange может выглядеть следующим образом:
Повторное тестирование, переписывание и анализ
Метод теста сейчас обрабатывает не все требуемые случаи. Если тестируемый метод Debit не смог выдать исключение xref:System.ArgumentOutOfRangeException, когда значение debitAmount было больше остатка (или меньше нуля), метод теста выдает успешное прохождение. Это нехорошо, поскольку метод теста должен был завершиться с ошибкой в том случае, если исключение не создается.
Это является ошибкой в методе теста. Для решения этой проблемы добавим утверждение xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail%2A?displayProperty=nameWithType в конце тестового метода для обработки случая, когда исключение не создается.
Однако повторный запуск теста показывает, что тест теперь оказывается непройденным при перехватывании верного исключения. Блок catch перехватывает исключение, но метод продолжает выполняться, и в нем происходит сбой на новом утверждении xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail%2A?displayProperty=nameWithType. Чтобы разрешить эту проблему, добавим оператор return после StringAssert в блоке catch . Повторный запуск теста подтверждает, что проблема устранена. Окончательная версия метода Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange выглядит следующим образом:
Усовершенствования тестового кода привели к созданию более надежных и информативных методов теста. Но что более важно, в результате был также улучшен тестируемый код.
[!TIP] В этом пошаговом руководстве используется платформа модульных тестов Microsoft для управляемого кода. Обозреватель тестов также может запускать тесты c платформ модульных тестов стороннего производителя, которые имеют адаптеры для обозревателя тестов. Дополнительные сведения см. в разделе Установка платформ модульного тестирования сторонних поставщиков.
Сведения о запуске тестов из командной строки см. в разделе Параметры командной строки VSTest.Console.exe.
В процессе разработки приложения функция Live Unit Testing автоматически выполняет все затронутые модульные тесты в фоновом режиме и отображает результаты и объем протестированного кода в реальном времени. При изменении кода эта функция предоставляет отчет о том, как внесенные изменения повлияли на имеющиеся и покрывается ли новый добавленный код одним или несколькими имеющимися тестами. За счет этого вы не забудете написать модульные тесты при исправлении ошибок или добавлении новых функций.
Используемая для тестирования функция Live Unit Testing сохраняет данные о состоянии тестов. Благодаря этому Live Unit Testing обеспечивает высокую производительность наряду с динамическим выполнением тестов при изменении кода.
Поддерживаемые тестовые платформы
Если у вас есть старые тестовые проекты на основе 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 в окно Выходные данные.
Можно также отобразить подробные выходные данные в окне Выходные данные в Live Unit Testing, задав для переменной среды уровня пользователя VS_UTE_DIAGNOSTICS значение 1 и перезапустив Visual Studio.
Запуск, приостановка и остановка
Чтобы включить 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 обновляет каждую строку кода в редакторе Visual Studio, чтобы показать, охватывают ли модульные тесты написанный код и завершились ли они успешно. На следующем изображении показаны строки кода с выполненными тестами и тестами, завершившимися сбоем, а также строки кода, не входящие в протестированный объем. Строки с зеленым значком "✓" прошли все тесты, строки с красным значком "x" не прошли один или несколько тестов, а строки с синим значком "➖" не охвачены ни одним из тестов.
Визуализация протестированного объема в Live Unit Testing обновляется сразу же после изменения кода в редакторе. Во время обработки правок визуализация изменяется, указывая, что данные не обновлены. В этом случае под символами успешного выполнения, сбоя и символом непротестированного объема появляется круглый значок таймера, как показано на изображении ниже.
Получение информации о состоянии теста
Наведя указатель мыши на символ удачного или неудачного выполнения в окне кода, вы можете увидеть, сколько тестов выполнялось в этой строке. Чтобы просмотреть данные о состоянии отдельных тестов, выберите символ:
Кроме отображения имен и результатов тестов подсказка позволяет повторно запустить набор тестов или выполнить их отладку. Если в подсказке выбрать один или несколько тестов, можно также запустить или выполнить отладку только для них. Это позволяет отлаживать тесты, оставаясь в окне с кодом. Помимо возможности отслеживания всех настроенных точек останова, при отладке вы также можете запрограммировать приостановку, когда отладчик выполняет метод Assert, возвращающий непредвиденный результат.
Если навести указатель мыши на непройденный тест в подсказке, она развернется. Здесь вы можете просмотреть дополнительные сведения, как показано на следующем рисунке: Чтобы перейти непосредственно к непройденному тесту, дважды щелкните его в подсказке.
При переходе к непройденному тесту 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 состояние модульных тестов в обозревателе тестов сразу же обновляется. Вам не нужно явно запускать модульные тесты. При отключении или остановке 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 и выполните следующие действия:
- В обозревателе решений щелкните решение правой кнопкой мыши и выберите Динамическое модульное тестирование >Исключить, чтобы исключить все решение.
- Щелкните правой кнопкой мыши каждый тестовый проект, который вы хотите добавить в тесты, и выберите Динамическое модульное тестирование >Включить.
Исключение отдельных тестов в окне редактора кода
Включать и исключать отдельные методы теста можно в окне редактора кода. В окне редактора кода щелкните сигнатуру метода теста правой кнопкой мыши и выберите один из следующих вариантов:
- Динамическое модульное тестирование >Включить
- Динамическое модульное тестирование >Исключить
- Динамическое модульное тестирование >Исключить все, кроме
Исключение тестов с помощью программных средств
Вы также можете отменить создание отчетов о покрытии в Live Unit Testing для некоторых методов, классов или структур, применив к ним атрибут ExcludeFromCodeCoverageAttribute.
Чтобы исключить отдельные методы из Live Unit Testing, используйте следующие атрибуты:
- Для xUnit: [Trait("Category", "SkipWhenLiveUnitTesting")]
- Для NUnit: [Category("SkipWhenLiveUnitTesting")]
- Для MSTest: [TestCategory("SkipWhenLiveUnitTesting")]
Чтобы исключить целые сборки тестов из Live Unit Testing, используйте следующие атрибуты:
При включении функции Live Unit Testing в решении Visual Studio она визуально описывает охват тестов и их состояние. Она также динамически выполняет тесты при каждом изменении кода и немедленно уведомляет, если изменение вызвало сбой.
Предварительные требования
Создание решения и проекта библиотеки классов
Решение — это просто контейнер для одного или нескольких проектов. Чтобы создать пустое решение, откройте Visual Studio и сделайте следующее:
Выберите Файл > Создать > Проект в меню верхнего уровня Visual Studio.
Введите решение в поле поиска шаблона и выберите шаблон Пустое решение. Присвойте проекту имя UtilityLibraries.
Завершите создание решения.
После создания решения вы создадите библиотеку классов с именем StringLibrary, которая содержит несколько методов расширения для работы со строками.
- В обозревателе решений щелкните решение UtilityLibraries правой кнопкой мыши и последовательно выберите пункты Добавить >Новый проект.
Присвойте проекту имя StringLibrary.
Щелкните Создать, чтобы создать проект.
Замените весь существующий код, отображаемый в редакторе кода, следующим кодом:
StringLibrary имеет три статических метода:
StartsWithUpper возвращает true , если строка начинается с прописной буквы; в противном случае он возвращает false .
StartsWithLower возвращает true , если строка начинается со строчной буквы; в противном случае он возвращает false .
HasEmbeddedSpaces возвращает true , если строка содержит внедренный пробел; в противном случае он возвращает false .
Выберите Сборка > Сборка решения в меню верхнего уровня Visual Studio. Сборка должна выполниться успешно.
Создание тестового проекта
Следующим шагом является создание проекта модульного теста для тестирования библиотеки StringLibrary. Создайте модульные тесты, выполнив следующие действия:
- В обозревателе решений щелкните решение UtilityLibraries правой кнопкой мыши и последовательно выберите пункты Добавить >Новый проект.
Модульные тесты необязательно писать на том же языке, что и библиотеку классов.
Этот учебник по началу работы использует Live Unit Testing с платформой тестирования MSTest. Вы также можете использовать платформы тестирования xUnit и NUnit.
Назовите проект StringLibraryTests и щелкните Далее.
Этот учебник по началу работы использует Live Unit Testing с платформой тестирования MSTest. Вы также можете использовать платформы тестирования xUnit и NUnit.
Проект модульного теста не может автоматически получить доступ к тестируемой библиотеке классов. Вы предоставляете доступ к библиотеке тестов, добавив ссылку на проект библиотеки классов. Для этого щелкните проект StringLibraryTests правой кнопкой мыши и выберите Добавить > Ссылка. В диалоговом окне Диспетчер ссылок щелкните вкладку Решение и выберите проект StringLibrary, как показано на следующей иллюстрации.
Замените стандартный код модульного теста, включенный в шаблон, следующим кодом:
Сохраните проект, выбрав значок Сохранить на панели инструментов.
Так как код модульного теста включает некоторые отличные от ASCII символы, появится указанное ниже диалоговое окно с предупреждением о том, что при сохранении файла в формате ASCII по умолчанию некоторые символы будут потеряны.
В раскрывающемся списке Кодировка диалогового окна Дополнительные параметры сохранения выберите параметр Юникод (UTF-8, без сигнатуры), кодовая страница 65001, как показано на следующей иллюстрации:
Скомпилируйте проект модульного теста, выбрав Сборка > Перестроить решение в меню верхнего уровня Visual Studio.
Вы создали библиотеку классов, а также несколько модульных тестов для нее. Вы завершили подготовку к использованию Live Unit Testing.
Включение Live Unit Testing
Вы уже написали тесты для библиотеки классов StringLibrary, но еще не запускали их. После включения функция Live Unit Testing выполняет их автоматически. Для этого сделайте следующее:
В меню верхнего уровня Visual Studio выберите Тест > Live Unit Testing > Запустить.
Visual Studio запускает функцию Live Unit Testing, которая автоматически выполняет все тесты.
По окончании выполнения обозреватель тестов отображает как общие результаты, так и результаты отдельных тестов. Кроме того, в окне редактора кода выводится графическое представление для результатов тестов и объема протестированного кода. Как показано на следующей иллюстрации, все три теста прошли успешно. Кроме того, видно, что наши тесты охватили все ветви кода в методе StartsWithUpper и все эти тесты были выполнены успешно (на что указывает зеленая галочка "✓"). Наконец, показано, что ни один из других методов в StringLibrary не имеет объем протестированного кода (на что указывает синяя линия "➖").
По окончании выполнения Live Unit Testing отображает как общие результаты, так и результаты отдельных тестов. Кроме того, в окне редактора кода выводится графическое представление для результатов тестов и объема протестированного кода. Как показано на следующей иллюстрации, все три теста прошли успешно. Кроме того, видно, что наши тесты охватили все ветви кода в методе StartsWithUpper и все эти тесты были выполнены успешно (на что указывает зеленая галочка "✓"). Наконец, показано, что ни один из других методов в StringLibrary не имеет объем протестированного кода (на что указывает синяя линия "➖").
Вы также можете получить более подробные сведения о покрытии и результатах тестов, щелкнув отдельный значок объема протестированного кода в окне редактора кода. Чтобы изучить эту информацию, сделайте следующее:
Щелкните зеленую галочку в строке, где if (String.IsNullOrWhiteSpace(s)) считывается в методе StartsWithUpper . Как показано на следующей иллюстрации, Live Unit Testing указывает, что эту строку кода охватили три теста и все они были выполнены успешно.
Щелкните зеленую галочку в строке, где return Char.IsUpper(s[0]) считывается в методе StartsWithUpper . Как показано на следующей иллюстрации, Live Unit Testing указывает, что эту строку кода охватили только два теста и все они были выполнены успешно.
Основной поднятый Live Unit Testing вопрос — это неполный объем протестированного кода. Ему и посвящен следующий раздел.
Увеличение объема протестированного кода
В этом разделе вы расширите область действия модульных тестов, чтобы они захватывали метод StartsWithLower . При этом Live Unit Testing продолжит динамически тестировать ваш код.
Чтобы увеличить объем протестированного кода, захватив метод StartsWithLower , сделайте следующее:
Добавьте следующие методы TestStartsWithLower и TestDoesNotStartWithLower в файл исходного кода теста проекта:
Измените метод DirectCallWithNullOrEmpty , добавив следующий код сразу после вызова метода Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsFalse .
Live Unit Testing автоматически выполняет новые и измененные тесты, когда вы изменяете исходный код. Как показано на следующей иллюстрации, все тесты, включая два добавленных и один измененный, были выполнены успешно.
Перейдите в окно, содержащее исходный код для класса StringLibrary. Live Unit Testing показывает, что объем протестированного кода расширен и распространяется на метод StartsWithLower .
В некоторых случаях успешные тесты в обозревателе тестов могут быть выделены серым. Это означает, что тест выполняется прямо сейчас либо не запускался повторно из-за отсутствия изменений в коде, которые повлияли бы на тест, со времени последнего его выполнения.
Пока что все наши тесты прошли успешно. В следующем разделе мы рассмотрим, что делать в случае сбоя теста.
Обработка сбоя при тесте
В этом разделе вы узнаете, как использовать Live Unit Testing для идентификации, диагностики и устранения сбоев тестов. Для этого вы расширите объем протестированного кода, захватив метод HasEmbeddedSpaces .
Добавьте следующий метод в файл теста:
При выполнении теста Live Unit Testing указывает, что произошел сбой метода TestHasEmbeddedSpaces , как показано на следующей иллюстрации:
Выберите окно, где отображается код библиотеки. Для Live Unit Testing был расширен объем протестированного кода с захватом метода HasEmbeddedSpaces . Эта функция также сообщает о сбое теста, добавляя красные значки "🞩" для строк, охваченных непройденными тестами.
Наведите указатель мыши на строку с сигнатурой метода HasEmbeddedSpaces . Live Unit Testing отображает подсказку, сообщающую, что метод охвачен одним тестом, как показано на следующей иллюстрации:
Выберите непройденный тест TestHasEmbeddedSpaces. Live Unit Testing предлагает вам ряд возможностей, в том числе выполнение всех тестов и отладку всех тестов, как показано на этой иллюстрации:
Выберите Отладить все, чтобы отладить непройденный тест.
Visual Studio выполняет тест в режиме отладки.
В тесте каждая строка массива назначается переменной с именем phrase , которая передается в метод HasEmbeddedSpaces . Когда выражение утверждения в первый раз принимает значение false , выполнение программы приостанавливается и вызывается отладчик. Диалоговое окно исключения, полученное в результате непредвиденного значения в вызове метода Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue , показано на следующей иллюстрации.
Кроме того, для диагностики непройденного теста мы можем использовать все предоставляемые Visual Studio средства отладки, как показано на следующей иллюстрации:
Обратите внимание, что в окне Видимые переменная phrase имеет значение "Name\tDescription", что соответствует второму элементу массива. Метод теста ожидает, что HasEmbeddedSpaces возвращает true при передаче данной строки; вместо этого он возвращает false . Очевидно, он не распознает символ табуляции "\t" как внедренный пробел.
Выберите Отладка > Продолжить нажмите клавишу F5 или кнопку Продолжить на панели инструментов, чтобы продолжить выполнение программы тестирования. Так как возникло необработанное исключение, тест был завершен. Это дает достаточно сведений для предварительного исследования ошибки. Либо подпрограмма тестирования TestHasEmbeddedSpaces сделала неверное допущение, либо HasEmbeddedSpaces неправильно распознает все внедренные пробелы.
Чтобы выявить и устранить проблему, начните с метода StringLibrary.HasEmbeddedSpaces . Посмотрите на сравнение в методе HasEmbeddedSpaces . В нем внедренный пробел считается равным U+0020. Однако в стандарте Юникод есть ряд других пробелов. Это дает основания полагать, что код библиотеки был неправильно протестирован на пробелы.
Live Unit Testing автоматически перезапускает метод непройденного теста.
Live Unit Testing отображает обновленные результаты, в том числе в окне редактора кода.
В процессе разработки приложения функция Live Unit Testing автоматически выполняет все затронутые модульные тесты в фоновом режиме и отображает результаты и объем протестированного кода в реальном времени. При изменении кода эта функция предоставляет отчет о том, как внесенные изменения повлияли на имеющиеся и покрывается ли новый добавленный код одним или несколькими имеющимися тестами. За счет этого вы не забудете написать модульные тесты при исправлении ошибок или добавлении новых функций.
Используемая для тестирования функция Live Unit Testing сохраняет данные о состоянии тестов. Благодаря этому Live Unit Testing обеспечивает высокую производительность наряду с динамическим выполнением тестов при изменении кода.
Поддерживаемые тестовые платформы
Если у вас есть старые тестовые проекты на основе 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 в окно Выходные данные.
Можно также отобразить подробные выходные данные в окне Выходные данные в Live Unit Testing, задав для переменной среды уровня пользователя VS_UTE_DIAGNOSTICS значение 1 и перезапустив Visual Studio.
Запуск, приостановка и остановка
Чтобы включить 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 обновляет каждую строку кода в редакторе Visual Studio, чтобы показать, охватывают ли модульные тесты написанный код и завершились ли они успешно. На следующем изображении показаны строки кода с выполненными тестами и тестами, завершившимися сбоем, а также строки кода, не входящие в протестированный объем. Строки с зеленым значком "✓" прошли все тесты, строки с красным значком "x" не прошли один или несколько тестов, а строки с синим значком "➖" не охвачены ни одним из тестов.
Визуализация протестированного объема в Live Unit Testing обновляется сразу же после изменения кода в редакторе. Во время обработки правок визуализация изменяется, указывая, что данные не обновлены. В этом случае под символами успешного выполнения, сбоя и символом непротестированного объема появляется круглый значок таймера, как показано на изображении ниже.
Получение информации о состоянии теста
Наведя указатель мыши на символ удачного или неудачного выполнения в окне кода, вы можете увидеть, сколько тестов выполнялось в этой строке. Чтобы просмотреть данные о состоянии отдельных тестов, выберите символ:
Кроме отображения имен и результатов тестов подсказка позволяет повторно запустить набор тестов или выполнить их отладку. Если в подсказке выбрать один или несколько тестов, можно также запустить или выполнить отладку только для них. Это позволяет отлаживать тесты, оставаясь в окне с кодом. Помимо возможности отслеживания всех настроенных точек останова, при отладке вы также можете запрограммировать приостановку, когда отладчик выполняет метод Assert, возвращающий непредвиденный результат.
Если навести указатель мыши на непройденный тест в подсказке, она развернется. Здесь вы можете просмотреть дополнительные сведения, как показано на следующем рисунке: Чтобы перейти непосредственно к непройденному тесту, дважды щелкните его в подсказке.
При переходе к непройденному тесту 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 состояние модульных тестов в обозревателе тестов сразу же обновляется. Вам не нужно явно запускать модульные тесты. При отключении или остановке 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 и выполните следующие действия:
- В обозревателе решений щелкните решение правой кнопкой мыши и выберите Динамическое модульное тестирование >Исключить, чтобы исключить все решение.
- Щелкните правой кнопкой мыши каждый тестовый проект, который вы хотите добавить в тесты, и выберите Динамическое модульное тестирование >Включить.
Исключение отдельных тестов в окне редактора кода
Включать и исключать отдельные методы теста можно в окне редактора кода. В окне редактора кода щелкните сигнатуру метода теста правой кнопкой мыши и выберите один из следующих вариантов:
- Динамическое модульное тестирование >Включить
- Динамическое модульное тестирование >Исключить
- Динамическое модульное тестирование >Исключить все, кроме
Исключение тестов с помощью программных средств
Вы также можете отменить создание отчетов о покрытии в Live Unit Testing для некоторых методов, классов или структур, применив к ним атрибут ExcludeFromCodeCoverageAttribute.
Чтобы исключить отдельные методы из Live Unit Testing, используйте следующие атрибуты:
- Для xUnit: [Trait("Category", "SkipWhenLiveUnitTesting")]
- Для NUnit: [Category("SkipWhenLiveUnitTesting")]
- Для MSTest: [TestCategory("SkipWhenLiveUnitTesting")]
Чтобы исключить целые сборки тестов из Live Unit Testing, используйте следующие атрибуты:
As you're developing an application, Live Unit Testing automatically runs any impacted unit tests in the background and presents the results and code coverage in real time. As you modify your code, Live Unit Testing provides feedback on how your changes impacted existing tests and whether the new code you've added is covered by one or more existing tests. This gently reminds you to write unit tests as you're making bug fixes or adding new features.
When you use Live Unit Testing for your tests, it persists data about the status of your tests. Using persisted data allows Live Unit Testing to offer superior performance while running your tests dynamically in response to code changes.
Supported test frameworks
If you have older MSTest-based test projects that reference Microsoft.VisualStudio.QualityTools.UnitTestFramework, and you don’t wish to move to the newer MSTest NuGet packages, upgrade to Visual Studio 2019 or Visual Studio 2017.
In some cases, you may need to explicitly restore the NuGet packages referenced by a project in order for Live Unit Testing to work. You can do this either by doing an explicit build of the solution (select Build > Rebuild Solution from the top-level Visual Studio menu) or by restoring packages in the solution (right-click on the solution and select Restore NuGet Packages).
Configure
Configure Live Unit Testing by selecting Tools > Options from the top-level Visual Studio menu bar, and then selecting Live Unit Testing in the left pane of the Options dialog.
After Live Unit Testing is enabled (see the next section, Start, pause, and stop Live Unit Testing), you can also open the Options dialog by selecting Test > Live Unit Testing > Options.
The following image shows the Live Unit Testing configuration options available in the dialog:
The configurable options include:
Whether Live Unit Testing pauses when a solution is built and debugged.
Whether Live Unit Testing pauses when a system's battery power falls below a specified threshold.
Whether Live Unit Testing runs automatically when a solution is opened.
Whether to enable debug symbol and XML documentation comment generation.
The directory in which to store persisted data.
The ability to delete all persisted data. This is useful when Live Unit Testing is behaving in an unpredictable or unexpected way, which suggests that the persisted data has become corrupted.
The interval after which a test case times out. The default is 30 seconds.
The maximum number of test processes that Live Unit Testing creates.
The maximum amount of memory that Live Unit Testing processes can consume.
The level of information written to the Live Unit Testing Output window.
Options include no logging (None), error messages only (Error), error and informational messages (Info, the default), or all detail (Verbose).
You can also display verbose output in the Live Unit Testing Output window by assigning a value of "1" to a user-level environment variable named VS_UTE_DIAGNOSTICS , and then restarting Visual Studio.
To capture detailed MSBuild log messages from Live Unit Testing in a file, set the LiveUnitTesting_BuildLog user-level environment variable to the name of the file to contain the log.
Start, pause, and stop
To enable Live Unit Testing, select Test > Live Unit Testing > Start from the top-level Visual Studio menu. When Live Unit Testing is enabled, the options available on the Live Unit Testing menu change from a single item, Start, to Pause and Stop:
Pause temporarily suspends Live Unit Testing.
When Live Unit Testing is paused, coverage visualization does not appear in the editor, but all the data that was collected is preserved. To resume Live Unit Testing, select Continue from the Live Unit Testing menu. Live Unit Testing does the necessary work to catch up with all the edits that have been made while it was paused and updates the glyphs appropriately.
Stop completely stops Live Unit Testing. Live Unit Testing discards all data that it has collected.
If you start Live Unit Testing in a solution that does not include a unit test project, the Pause and Stop options appear on the Live Unit Testing menu, but Live Unit Testing does not start. The Output window displays a message that begins, "No supported test adapters are referenced by this solution. ".
At any time, you can temporarily pause or completely stop Live Unit Testing. You may want to do this, for example, if you're in the middle of a refactoring and know that your tests will be broken for a while.
View coverage visualization
After it's enabled, Live Unit Testing updates each line of code in the Visual Studio editor to show you whether the code you're writing is covered by unit tests and whether the tests that cover it are passing. The following image shows lines of code with both passing and failing tests, as well as lines of code that are not covered by tests. Lines decorated with a green "✓" are covered only by passing tests, lines decorated with a red "x" are covered by one or more failing tests, and lines decorated by a blue "➖" are not covered by any test.
Live Unit Testing coverage visualization is updated immediately when you modify code in the code editor. While processing the edits, visualization changes to indicate that the data is not up-to-date by adding a round timer image below the passing, failing, and not covered symbols, as the following image shows.
Get information about test status
By hovering over the succeeded or failed symbol in the code window, you can see how many tests are hitting that line. To see the status of the individual tests, select the symbol:
In addition to providing the names and result of tests, the tooltip lets you rerun or debug the set of tests. If you select one or more of the tests in the tooltip, you can also run or debug just those tests. This allows you to debug your tests without having to leave the code window. When debugging, in addition to observing any breakpoints you may have already set, program execution pauses when the debugger executes an Assert method that returns an unexpected result.
When you hover over a failed test in the tooltip, it expands to provide additional info about the failure, as shown in the following image. To navigate directly to a failed test, double-click it in the tooltip.
When you navigate to the failed test, Live Unit Testing visually indicates in the method signature the tests that have:
- passed (indicated by a half-full beaker along with a green "✓")
- failed (a half-full beaker along with a red "🞩")
- are not involved in Live Unit Testing (a half-full beaker along with a blue "➖")
Non-test methods are not decorated with a symbol. The following image illustrates all four types of methods.
Diagnose and correct test failures
From the failed test, you can easily debug the product code, make edits, and continue developing your application. Because Live Unit Testing runs in the background, you don't have to stop and restart Live Unit Testing during the debug, edit, and continue cycle.
Test Explorer
Test Explorer provides an interface that lets you run and debug tests and analyze test results. Live Unit Testing integrates with Test Explorer. When Live Unit Testing is not enabled or is stopped, Test Explorer displays the status of unit tests the last time a test was run. Source code changes require that you rerun the tests. In contrast, when Live Unit Testing is enabled, the status of unit tests in Test Explorer is updated immediately. You don't need to explicitly run the unit tests.
Open Live Unit Testing by selecting Test > Windows > Test Explorer from the top-level Visual Studio menu.
You may notice in the Test Explorer window that some tests are faded out. For example, when you enable Live Unit Testing after opening a previously saved project, the Test Explorer window had faded out all but the failed test, as the following image shows. In this case, Live Unit Testing has rerun the failed test, but it has not rerun the successful tests. This is because Live Unit Testing's persisted data indicates that there were no changes since the tests were last run successfully.
You can rerun any tests that appear faded by selecting the Run All or Run options from the Test Explorer menu. Or, select one or more tests in the Test Explorer menu, right-click, and then select Run Selected Tests or Debug Selected Tests from the popup menu. As tests are run, they bubble up the top.
There are some differences between Live Unit Testing automatically running and updating test results and explicitly running tests from Test Explorer. These differences include:
- Running or debugging tests from the Test Explorer window runs regular binaries, whereas Live Unit Testing runs instrumented binaries.
- Live Unit Testing does not create a new application domain to run tests, but rather runs tests from the default domain. Tests run from the Test Explorer window do create a new application domain.
- Live Unit Testing runs tests in each test assembly sequentially. In the Test Explorer window, you can choose to run multiple tests in parallel.
Live Unit Testing window
Live Unit Testing, similar to Test Explorer, provides an interface that lets you run and debug tests and analyze test results. When Live Unit Testing is enabled, the status of unit tests in Test Explorer is updated immediately. You don't need to explicitly run the unit tests. When Live Unit Testing is not enabled or is stopped, Live Unit Testing displays the status of unit tests the last time a test was run. After you restart Live Unit Testing, a source code change is required to rerun the tests.
Start Live Unit Testing by selecting Test > Live Unit Testing > Start from the top-level Visual Studio menu. You can also open the Live Unit Testing window using View > Other Windows > Live Unit Testing Window.
You may notice in the Live Unit Testing window that some tests are faded out. For example, when you stop and restart Live Unit Testing, the Live Unit Testing window fades out all the tests, as the following image shows. Faded-out test results indicate that the test was not a part of the latest Live Unit Test run. Tests only run when a change to the test or the test's dependencies is detected. If there is no change, it avoids unnecessarily running the test. In this case, the grayed out test result is still "up-to-date" though it was not a part of the latest run.
You can rerun any tests that appear faded by making a code change.
There are some differences between Live Unit Testing automatically running and updating test results and explicitly running tests from Test Explorer. These differences include:
- Running or debugging tests from the Test Explorer window runs regular binaries, whereas Live Unit Testing runs instrumented binaries.
- Live Unit Testing does not create a new application domain to run tests, but rather runs tests from the default domain. Tests run from the Test Explorer window do create a new application domain.
- Live Unit Testing runs tests in each test assembly sequentially. In the Test Explorer window, you can choose to run multiple tests in parallel.
Large solutions
If your solution has 10 or more projects, Visual Studio displays the following dialog when you:
- start Live Unit Testing and there is no persisted data
- select Tools >Options >Live Unit Testing >Delete Persisted Data
The dialog warns you that dynamic execution of large numbers of tests in large projects can severely impact performance. If you select OK, Live Unit Testing executes all tests in the solution. If you select Cancel, you can select the tests to execute. The following section explains how to do this.
Include and exclude test projects and test methods
For solutions with many test projects, you can control which projects and individual methods in a project participate in Live Unit Testing. For example, if you have a solution with hundreds of test projects, you can select a targeted set of test projects to participate in Live Unit Testing. There are a number of ways to do this, depending on whether you want to exclude all the tests in the project or solution, include or exclude most tests, or exclude individual tests. Live Unit Testing saves include/exclude state as a user setting and remembers it when a solution is closed and reopened.
Exclude all tests in a project or solution
To select the individual projects in unit tests, do the following after Live Unit Testing is started:
- Right-click the solution in Solution Explorer and choose Live Unit Testing >Exclude to exclude the entire solution.
- Right-click each test project that you'd like to include in the tests and choose Live Unit Testing >Include.
Exclude individual tests from the code editor window
You can use the code editor window to include or exclude individual test methods. Right-click on the signature of the test method in the code editor window, and then select one of the following options:
Exclude tests programmatically
You can apply the ExcludeFromCodeCoverageAttribute attribute to programmatically exclude methods, classes, or structures from reporting their coverage in Live Unit Testing.
Use the following attributes to exclude individual methods from Live Unit Testing:
- For xUnit: [Trait("Category", "SkipWhenLiveUnitTesting")]
- For NUnit: [Category("SkipWhenLiveUnitTesting")]
- For MSTest: [TestCategory("SkipWhenLiveUnitTesting")]
Use the following attributes to exclude an entire assembly of tests from Live Unit Testing:
Читайте также: