Поделиться через


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

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

Что поддерживается?

  • Проекты C# и VB, предназначенные для .NET 6.0 и более поздних версий
  • Тестовые проекты, созданные для конфигурации DEBUG
  • Visual Studio 2022 и более поздних версий

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

Включите эту функцию, выбрав Test>Options>"(Экспериментальное) Включить возможность горячей перезагрузки тестов для проектов тестирования на C# и VB, ориентированных на .NET 6 и более поздние версии". Снимок экрана: кнопка

Почему это считается экспериментальным?

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

Принцип работы

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

Под капотом мы используем ту же инфраструктуру Edit and Continue, которая существует в недавно выпущенном интерфейсе "горячей перезагрузки", позволяющем редактировать код C#/VB во время выполнения, чтобы определить внесенные изменения. По этой причине горячая перезагрузка выполняется только в том случае, если нет "грубых изменений", в этом случае мы возвращаемся к созданию тестов перед их выполнением. Дополнительные сведения о поддерживаемых изменениях см. в документации по редактированию и продолжению

Сколько быстрее будет выполняться тест?

Существует множество переменных, которые влияют на процесс оценки того, сколько времени эта функция сохранит вам. Рассмотрим пример.

  • Сколько времени занимает сборка проекта.
  • Какой вид редактирования был сделан.
  • Насколько велик файл, где была сделана правка.
  • Где было сделано изменение (если это был конечный проект или нет).

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

Примечания.

  • Первый тестовый запуск после включения опции или открытия Visual Studio потребует сборки проекта.
  • Файлы в редакторе могут не сохраняться при выполнении тестов. Чтобы устранить эти и перед возвратом, убедитесь, что выполняется полная сборка (CTRL+SHIFT+B).
  • Двоичные файлы на диске не обновляются при динамическом выполнении теста с горячей перезагрузкой.
  • Выполнение тестов с горячей перезагрузкой не работает с "Запуск всех тестов", ">" в обозревателе тестов, а также не работает с Запуск всех тестов из узла решения в обозревателе решений. Эта функция не работает с этими командами, так как в настоящее время они гарантируют создание всего решения.
  • При выполнении тестов с неподдерживаемых целевых платформ (ниже .NET 6.0) происходит сборка проекта.
  • Если вы видите какие-либо несоответствия между тем, что находится на диске и что отображает обозреватель тестов, рассмотрите возможность сборки решения или проекта с помощью CTRL+SHIFT+B , а затем выполните тесты. Любая явная сборка заменяет результаты теста горячей перезагрузки обычными результатами теста полной сборки.

Известные проблемы

  • Выполнение теста с горячей перезагрузкой не выполняется в следующих сценариях:
    • Объем протестированного кода
    • Динамическое модульное тестирование
    • Составление профиля
    • Отладка
  • Трассировки стека могут быть трудночитаемы из-за наличия непрочитаемых маркеров. Эта проблема отслеживается здесь и планируется для исправления в .NET 7.0
    • Рекомендуемое решение в этом случае — создать проект и повторно запустить тест.

Ваши отзывы важны

Как отмечалось ранее, для завершения этой экспериментальной функции нам потребуется ваш отзыв. Если у вас есть предложение о том, каким должен быть опыт, или возникнут какие-либо проблемы, пожалуйста, уделите минуту, чтобы сообщить нам о них. Только с вашим отзывом мы можем убедиться, что критически важные проблемы устранены, и будущие решения будут определены в соответствии с вашими входными данными.

Чтобы обратиться к нам, используйте механизм обратной связи Visual Studio.