Функция Live Unit Testing в Visual Studio 2017Live Unit Testing with Visual Studio 2017

В процессе разработки приложения функция Live Unit Testing автоматически выполняет все затронутые модульные тесты в фоновом режиме и отображает результаты и объем протестированного кода в интегрированной среде разработки Visual Studio в режиме реального времени.As you are developing an application, Live Unit Testing automatically runs any impacted unit tests in the background and presents the results and code coverage live in the Visual Studio IDE 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 will gently remind you to write unit tests as you are making bug fixes or adding new features.

Note

Функция Live Unit Testing доступна в проектах C# и Visual Basic, предназначенных для .NET Core или .NET Framework, в выпуске Visual Studio 2017 Enterprise.Live Unit Testing is available for C# and Visual Basic projects that target the .NET Core or .NET Framework in the Enterprise Edition of Visual Studio 2017.

Используемая для тестирования функция Live Unit Testing сохраняет данные о состоянии тестов.When you use Live Unit Testing for your tests, Live Unit Testing persists data about the status of your tests. Благодаря этой возможности функция Live Unit Testing обеспечивает высокую производительность наряду с динамическим выполнением тестов в ответ на изменения в коде.Its ability to use persisted data allows Live Unit Testing to offer superior performance while running your tests dynamically in response to code changes.

Поддерживаемые тестовые платформыSupported test frameworks

Функция Live Unit Testing работает на трех известных платформах модульного тестирования, приведенных в таблице ниже.Live Unit Testing works with the three popular unit testing frameworks listed in the following table. В этой таблице также приведены сведения о минимальной поддерживаемой версии адаптеров и платформ.The minimum supported version of their adapters and frameworks is also listed in the table. Платформы модульного тестирования доступны на сайте NuGet.org.The unit testing frameworks are all available from NuGet.org.

Тестовая платформаTest Framework Минимальная версия адаптера Visual StudioVisual Studio Adapter minimum version Минимальная версия платформыFramework minimum version
xUnit.netxUnit.net xunit.runner.visualstudio версии 2.2.0-beta3-build1187xunit.runner.visualstudio version 2.2.0-beta3-build1187 xunit 1.9.2xunit 1.9.2
NUnitNUnit NUnit3TestAdapter версии 3.5.1NUnit3TestAdapter version 3.5.1 NUnit версии 3.5.0NUnit version 3.5.0
MSTestMSTest MSTest.TestAdapter 1.1.4-previewMSTest.TestAdapter 1.1.4-preview MSTest.TestFramework 1.0.5-previewMSTest.TestFramework 1.0.5-preview

Если у вас есть старые тестовые проекты на основе MSTest, которые ссылаются на Microsoft.VisualStudio.QualityTools.UnitTestFramework, и вы не хотите переходить на более новые пакеты NuGet MSTest, выполните обновление до Visual Studio 2017 версии 15.4.If you have older MSTest based test projects that are referencing Microsoft.VisualStudio.QualityTools.UnitTestFramework and you don’t wish to move to the newer MSTest NuGet packages, upgrade to Visual Studio 2017 version 15.4.

В некоторых случаях, чтобы обеспечить работу Live Unit Testing, вам потребуется явным образом восстановить пакеты NuGet, на которые ссылается проект в решении.In some cases, you may need to explicitly restore the NuGet packages referenced by the projects in the solution in order for Live Unit Testing to work. Это можно сделать, выполнив сборку решения явным образом (в меню верхнего уровня Visual Studio выберите Пересобрать решение > Собрать) или восстановив пакеты в решении (щелкните решение правой кнопкой мыши и выберите пункт Восстановить пакеты NuGet) перед включением Living Unit Testing.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) before enabling Living Unit Testing.

Настройка Live Unit TestingConfigure Live Unit Testing

Чтобы настроить Live Unit Testing, в меню верхнего уровня Visual Studio выберите Сервис > Параметры, а затем в левой области диалогового окна Параметры щелкните Live Unit Testing.You can 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.

Tip

После включения функции Live Unit Testing (см. следующий раздел Запуск, приостановка и остановка функции Live Unit Testing) можно также открыть диалоговое окно Параметры, выбрав Тест > Live Unit Testing > Параметры.Once 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.

На следующем рисунке показаны параметры конфигурации Live Unit Testing, доступные в этом диалоговом окне:The following figure shows the Live Unit Testing configuration options available in the dialog:

Изображение

С помощью этих параметров вы можете настроить следующее:The configurable options include:

  • Будет ли функция Live Unit Testing приостанавливаться во время сборки и отладки решения.Whether Live Unit Testing pauses when a solution is built and debugged.

  • Будет ли функция Live Unit Testing приостанавливаться, если заряд батареи системы опустится ниже установленного порогового значения.Whether Live Unit Testing pauses when a system's battery power falls below a specified threshold.

  • Будет ли функция Live Unit Testing запускаться автоматически после открытия решения.Whether Live Unit Testing runs automatically when a solution is opened.

  • Следует ли включить отладочный символ и создание комментариев к XML-документации.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. Это полезно, когда функция Live Unit Testing работает непредсказуемо, что влечет за собой вероятное повреждение данных.This is useful when Live Unit Testing is behaving in unpredictable or unexpected ways, which suggests that the persisted data has become corrupted.

  • Интервал, после которого истекает время ожидания тестового случая. По умолчанию — 30 секунд.The interval after which a test case times out; the default is 30 seconds.

  • Максимальное число процессов тестирования, создаваемых Live Unit Testing.The maximum number of test processes that Live Unit Testing creates.

  • Максимальный объем памяти, которую могут использовать процессы Live Unit Testing.The maximum amount of memory that Live Unit Testing processes can consume.

  • Уровень информации, записываемой функцией Live Unit Testing в окно Выходные данные.The level of information written to the Live Unit Testing Output window.

    Доступные значения: None (данные журналов не записываются), Error (записываются только сообщения об ошибках), Info (значение по умолчанию, записываются сообщения об ошибках и информационные сообщения) или Verbose (записываются все сведения).Options include no logging (None), error messages only (Error), error and informational messages (Info, the default), or all detail (Verbose).

    Можно также отобразить подробные выходные данные в окне Выходные данные в Live Unit Testing, задав для переменной среды уровня пользователя VS_UTE_DIAGNOSTICS значение 1 и перезапустив Visual Studio.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.

    Чтобы записывать подробные сообщения журнала MSBuild из Live Unit Testing в файл, в качестве значения переменной среды уровня пользователя LiveUnitTesting_BuildLog задайте имя файла для хранения журнала.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.

Запуск, приостановка и остановка функции Live Unit TestingStart, pause, and stop Live Unit Testing

Чтобы включить Live Unit Testing, в меню верхнего уровня Visual Studio выберите Тест > Live Unit Testing > Запустить.You enable Live Unit Testing by selecting Test > Live Unit Testing > Start from the top-level Visual Studio menu. После включения Live Unit Testing в меню Live Unit Testing параметр Запустить можно изменить на следующие параметры: Пауза, Остановить и Сбросить очистку.When Live Unit Testing is enabled, the options available on the Live Unit Testing menu change from a single item, Start, to Pause, Stop, and Reset Clean.

Note

При запуске Live Unit Testing в решении, не содержащем проект модульного теста, параметры Пауза, Остановить и Reset Clean (Сбросить очистку) отображаются в меню Live Unit Testing, но сама эта функция не запускается.If you start Live Unit Testing in a solution that does not include a unit test project, the Pause, Stop, and Reset Clean options appear on the Live Unit Testing menu, but Live Unit Testing does not start. В окне Вывод отображается сообщение, начинающееся со слов "No supported test adapters are referenced by this solution..." (Это решение не ссылается на поддерживаемые адаптеры тестов...).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 are in the middle of a refactoring and know that your tests will be broken for a while. В меню Live Unit Testing доступны три следующих параметра:The three menu options are:

  • Пауза. Этот параметр временно приостанавливает работу функции Live Unit Testing.Pause, which temporarily suspends Live Unit Testing.

    В этом случае визуализация покрытия не отображается в редакторе, но все собранные данные сохраняются.When Live Unit Testing is paused, your coverage visualization does not appear in the editor, but all the data that was collected is preserved. Чтобы возобновить работу этой функции, в меню Live Unit Testing выберите Продолжить.To resume Live Unit Testing, select Continue from the Live Unit Testing menu. Функция Live Unit Testing выполнит необходимую работу с учетом всех внесенных во время приостановки изменений и обновит глиф должным образом.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.

  • Остановить. Этот параметр полностью останавливает работу функции Live Unit Testing.Stop, to completely stop Live Unit Testing. Все собранные данные будут удалены.Live Unit Testing discards all data that it has collected.

  • Сброс очистки. Этот параметр останавливает работу Live Unit Testing, удаляет сохраненные данные и перезапускает Live Unit Testing.Reset Clean, which stops Live Unit Testing, deletes persisted data, and restarts Live Unit Testing.

  • Параметры. Этот элемент интерфейса открывает диалоговое окно Параметры (см. раздел Настройка Live Unit Testing).Options, which opens the Options dialog described in the Configure Live Unit Testing section.

Просмотр визуализации покрытия в редакторе при вводеView coverage visualization in the editor as you type

После включения функция Live Unit Testing обновляет каждую строку кода в редакторе Visual Studio, чтобы показать, покрывается ли написанный код модульными тестами и завершились ли эти тесты успешно.Once 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 figure shows lines of code with both passing and failing tests, as well as lines of code that are not covered by tests. Строки с зеленым значком "✓" прошли все тесты, строки с красным значком "x" не прошли один или несколько тестов, а строки с синим значком "➖" не охвачены ни одним из тестов.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 изменяется сразу же после изменения кода в редакторе.Live Unit Testing coverage visualization is updated immediately as 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 figure shows.

Изображение

Получение сведений об удачных и неудачных тестахGet information on successful or failed tests

Наведя указатель мыши на символ удачного или неудачного выполнения в окне кода, вы можете увидеть, сколько тестов выполнялось в этой строке.By hovering over the succeeded or failed symbol in the code window, you can see how many tests are hitting that line. Если щелкнуть этот символ, отобразится состояние отдельных тестов, как показано на следующем рисунке:If you click on the symbol, you can see the status of the individual tests, as the following figure shows:

Изображение

Кроме отображения имен и результатов тестов подсказка позволяет повторно запустить набор тестов или запустить набор тестов с помощью отладчика.In addition to providing the names and result of tests, the tooltip lets you re-run the set of tests, as well as run the set of tests using the debugger. Если в подсказке выбрать один или несколько тестов, можно также запустить или выполнить отладку только для них.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. При отладке кроме возможности наблюдения всех настроенных точек останова, вы также можете запрограммировать приостановку, когда отладчик выполняет метод Assert, возвращающий непредвиденный результат.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. Дважды щелкнув непройденный тест в подсказке, вы перейдете к нему.If you double-click on the failed test in the tooltip, you can navigate directly to it.

Изображение

При переходе к непройденному тесту функция Live Unit Testing также визуально информирует в подписи метода о пройденных тестах (указатель в виде наполовину полной колбы с зеленым значком "✓"), о сбое (наполовину полная колба с красным значком "🞩") или о неохваченных функцией Live Unit Testing тестах (наполовину полная колба с синим значком "➖").When you navigate to the failed test, Live Unit Testing also 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 "🞩"), or 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 figure illustrates all four types of methods.

Изображение

Диагностика и устранение сбоев тестовDiagnose and correct test failures

В окне непройденного теста вы можете с легкостью отладить код продукта, внести изменения и продолжить разработку приложения.From the failed test, you can easily debug to the product code, make edits, and continue developing your application. Так как функция Live Unit Testing выполняется в фоновом режиме, ее не нужно останавливать и перезапускать при отладке, внесении правок и продолжении цикла.Because Live Unit Testing runs in the background, you do not have to stop and restart Live Unit Testing during the debug, edit, and continue cycle.

Например, сбой теста, показанный на предыдущем рисунке, вызван неверным предположением в методе теста о том, что при передаче в метод System.Char.IsLower неалфавитных символов возвращается значение true.For example, the test failure shown in the previous figure was caused by an incorrect assumption in the test method that non-alphabetic characters return true when passed to the System.Char.IsLower method. После исправления метода теста все тесты были пройдены.Once we correct the test method, we find that all tests pass. В ходе выполнения мы не приостанавливали и не останавливали работу функции Live Unit Testing.While we are doing this, we do not have to pause or stop Live Unit Testing.

Live Unit Testing и обозреватель тестовLive Unit Testing and Test Explorer

Как правило, обозреватель тестов предоставляет интерфейс, позволяющий выполнять и отлаживать тесты, а также анализировать их результаты.Ordinarily, Test Explorer provides the interface that lets you run, debug, and analyze your test results. Функция Live Unit Testing интегрируется с обозревателем тестов.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. И напротив, если функция Live Unit Testing включена, состояние модульных тестов в обозревателе тестов сразу же обновляется.In contrast, when Live Unit Testing is enabled, the status of unit tests in Test Explorer is updated immediately. В этом случае модульные тесты не нужно выполнять явным образом.You no longer need to explicitly run your unit tests.

Note

Чтобы открыть обозреватель тестов, выберите элементы Тест > Окна > Обозреватель тестов в меню верхнего уровня Visual Studio.You can open Test Explorer by selecting Test > Windows > Test Explorer from the top-level Visual Studio menu.

Вы можете заметить, что в окне обозревателя тестов некоторые тесты затемнены. Например, если включить функцию Live Unit Testing после открытия ранее сохраненного проекта, в окне обозревателя тестов будет затемнено все, кроме непройденных тестов, как показано на следующем рисунке.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 figure shows. Это значит, что Live Unit Testing повторно запустила непройденные тесты, но не запускала пройденные, так как сохраненные данные Live Unit Testing указывают на отсутствие изменений с момента последнего выполнения тестов.In this case, Live Unit Testing has rerun the failed test, but it has not rerun the successful tests, since 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 by selecting one or more tests in the Test Explorer menu, right-clicking, and selecting Run Selected Tests or Debug Selected Tests from the popup menu. По мере выполнения тесты перемещаются наверх.As tests are run, they bubble up the top.

Между автоматическим выполнением с обновлением результатов теста с помощью функции Live Unit Testing и явным выполнением тестов в обозревателе тестов есть некоторые различия.There are some differences between Live Unit Testing automatically running and updating test results and explicitly running tests from Test Explorer. Эти отличия описаны ниже.These differences include:

  • Во время выполнения и отладки тестов из окна обозревателя тестов используются обычные двоичные файлы, а при использовании функции Live Unit Testing — инструментированные двоичные файлы.Running or debugging tests from the Test Explorer window runs regular binaries, whereas Live Unit Testing runs instrumented binaries.
  • При выполнении тестов функция Live Unit Testing не создает домен приложения, а использует домен по умолчанию.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 выполняет тесты из разных сборок последовательно.Live Unit Testing runs tests in each test assembly sequentially. Если вы выполняете несколько тестов в окне обозревателя тестов, а затем нажимаете кнопку Запустить тесты параллельно, тесты будут выполняться параллельно.If you run multiple tests from the Test Explorer window and the Run Tests in Parallel button is selected, tests run in parallel.

Live Unit Testing и крупные решенияLive Unit Testing and large solutions

Если решение содержит 10 и более проектов, когда вы запускаете Live Unit Testing при отсутствии сохраненных данных или выбираете элементы Тест > Live Unit Testing > Сброс очистки в меню верхнего уровня Visual Studio, Visual Studio отображает следующее диалоговое окно. Оно содержит предупреждение о том, что динамическое выполнение большого числа тестов в крупных проектах может повлиять на производительность.If your solution has 10 or more projects, when you start Live Unit Testing and there is no persisted data, or when you select the Test > Live Unit Testing > Reset Clean option from the top-level Visual Studio menu, Visual Studio displays the following dialog to warn you that dynamic execution of large numbers of tests in large projects can severely impact performance. Если нажать кнопку ОК, Live Unit Testing выполнит все тесты в решении.If you select OK, Live Unit Testing executes all tests in the solution. Если нажать кнопку Отменить, можно выбрать тесты для выполнения.If you select Cancel, you can select the tests to execute. Сведения о том, как это сделать, см. в разделе Добавление и исключение тестовых проектов и методов теста.For information on how to do this, see the following section, Include and exclude test projects and test methods.

Диалоговое окно Live Unit Testing для крупных проектов

Добавление и исключение тестовых проектов и методов тестаInclude and exclude test projects and test methods

В решениях с большим количеством тестовых проектов вы можете контролировать, какие проекты и отдельные методы в проекте могут использоваться в функции Live Unit Testing.For solutions with many test projects, you can control what projects and what 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, whether you want to include or exclude most tests, or whether you want to exclude tests individually. Функция Live Unit Testing сохраняет состояние включения или исключения и запоминает его после закрытия и повторного открытия решения.Live Unit Testing saves include/exclude state as a user setting and remembers it when a solution is closed and reopened.

Исключение всех тестов в проекте или решенииExcluding all tests in a project or solution

Чтобы выбрать отдельные проекты в модульных тестах, запустите Live Unit Testing и выполните следующие действия:To select the individual projects in unit tests, do the following after Live Unit Testing is started:

  1. В обозревателе решений щелкните решение правой кнопкой мыши и выберите Динамические тесты > Исключить, чтобы исключить все решение.Right-click the solution in Solution Explorer and choose Live Tests > Exclude to exclude the entire solution.
  2. Щелкните правой кнопкой мыши каждый тестовый проект, который вы хотите добавить в тесты, и выберите Динамические тесты > Включить.Right-click each test project that you'd like to include in the tests and choose Live Tests > Include.

Исключение отдельных тестов в окне редактора кодаExcluding 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 select Live Tests > Include [the selected method], Live Tests > Exclude [the selected method], or Live Tests > Exclude All But [the selected method], where "the selected method" is the name of the method you've selected in the code window.

Исключение тестов программным способомExcluding tests programmatically

Вы также можете отменить создание отчетов о покрытии в Live Unit Testing для некоторых методов, классов или структур, применив к ним атрибут ExcludeFromCodeCoverageAttribute.You can apply the ExcludeFromCodeCoverageAttribute attribute to programmatically exclude methods, classes, or structures from reporting their coverage in Live Unit Testing.

Чтобы исключить отдельные методы из Live Unit Testing, также можно использовать следующие атрибуты:You can also use the following attributes to exclude individual methods from Live Unit Testing:

  • Для xUnit: [Trait("Category", "SkipWhenLiveUnitTesting")]For xUnit: [Trait("Category", "SkipWhenLiveUnitTesting")]
  • Для NUnit: [Category("SkipWhenLiveUnitTesting")]For NUnit: [Category("SkipWhenLiveUnitTesting")]
  • Для MSTest: [TestCategory("SkipWhenLiveUnitTesting")]For MSTest: [TestCategory("SkipWhenLiveUnitTesting")]

См. такжеSee also