Интеграция с Microsoft.Extensions

Эти расширения связывают Microsoft.Testing.Platform (MTP) с библиотеками Microsoft.Extensions.*, которые уже использует ваше приложение, поэтому компоненты платформы и расширений используют ту же инфраструктуру, что и остальная часть вашего кода. Для каждого расширения требуется дополнительный пакет NuGet, как описано в каждом разделе.

Совет

При использовании Microsoft. Testing.Platform.MSBuild пакет ведения журнала регистрируется автоматически с созданной точкой входа. Для пакета конфигурации требуется экземпляр IConfiguration, а для пакета размещения требуется либо TestingPlatformHostFactory, либо пользовательская точка входа, поэтому следуйте инструкциям в соответствующих разделах о регистрации.

Мост логирования

Мост журналирования направляет журналы диагностики Microsoft.Testing.Platform в ILogger, поэтому журналы платформы и расширений проходят через тот же конвейер Microsoft.Extensions.Logging, который ваше приложение уже использует. Вы можете повторно использовать существующий стек логирования — Console, Debug, Serilog, Application Insights, OpenTelemetry или пользовательский ILoggerProvider — без написания собственного поставщика логирования MTP. Для этого расширения требуется пакет NuGet Microsoft.Testing.Extensions.Logging.

Note

Доступно в MTP начиная с версии 2.3.0. Это расширение является экспериментальным, а его параметры и формат выходных данных могут измениться в будущей версии.

Мост перенаправит каждое сообщение только в том случае, если включено ведение журнала диагностики платформы. Если эффективный уровень журналирования платформы — None (это значение используется по умолчанию, если не передать --diagnostic), делегат настройки не вызывается, и фабрика логгеров не создается. Фильтры по категориям, которые вы задаете в ILoggingBuilder, могут сузить эффективный уровень диагностики платформы, но не могут расширить его.

Регистрация вручную

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddMicrosoftExtensionsLogging(logging => logging.AddConsole());

Снимок конфигурации

Экспериментальный пакет Microsoft.Testing.Extensions.Configuration добавляет в конвейер конфигурации MTP снимок IConfiguration, принадлежащего приложению, только для чтения.

Зарегистрируйте конфигурацию перед сборкой тестового приложения:

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddMicrosoftExtensionsConfigurationSnapshot(configuration);

По умолчанию для снимка используется порядок 2. Значения командной строки MTP (порядок 0) и переменные среды (порядок ) имеют более высокий приоритет, а снимок имеет более высокий приоритет, чем 3 (порядок 1). Передайте иной порядок, если вашему приложению требуется иной приоритет.

MTP считывает снимок, когда BuildAsync строит конвейер конфигурации. Последующие изменения и уведомления о перезагрузке не передаются. Вызывающий объект сохраняет владение конфигурацией, иерархические ключи сохраняют стандартный : разделитель, а регистрация применяется только к текущему процессу. Объект динамической конфигурации не пересекается с отдельно запущенным контроллером или процессом тестового узла.

Интеграция хоста

Экспериментальный пакет Microsoft.Testing.Extensions.Hosting запускает MTP в IHost, принадлежащем приложению. Хост остаётся корнем композиции и управляет своим поставщиком служб, конфигурацией, журналированием, поставщиками OpenTelemetry, жизненным циклом и освобождением ресурсов.

Для сгенерированной точки входа укажите TestingPlatformHostFactory как полностью квалифицированный статический метод, возвращающий новый, не запущенный экземпляр Task<IHost>:

<TestingPlatformHostFactory>Contoso.Tests.TestHost.CreateHost</TestingPlatformHostFactory>

Установите для HostOwned значение TestingPlatformOpenTelemetryMode, когда хост управляет поставщиками OpenTelemetry, а тестовый проект ссылается на Microsoft.Testing.Extensions.OpenTelemetry. Сгенерированная точка входа создает хост и освобождает его ресурсы, сохраняет самостоятельно зарегистрированные расширения и обходит фабрику для командной строки --help и --info.

Для пользовательской точки входа вызовите RunTestingPlatformAsync на хосте и зарегистрируйте среду тестирования через его обратный вызов. Метод импортирует снимок конфигурации, перенаправляет диагностику MTP в ILoggerFactory узла, запускает узел перед MTP, связывает отмену узла и вызывающей стороны с MTP, возвращает код завершения MTP и останавливает узел в блоке finally. Вызывающая сторона по-прежнему освобождает ресурсы хоста.

Не выводите в стандартный вывод сообщения о запуске и завершении работы хоста, журналировании и работе экспортёра, поскольку MTP использует его для машиночитаемых режимов, таких как --list-tests json, режим сервера JSON-RPC и протокол dotnet test. Кроме того, избегайте использования монопольно используемых глобальных ресурсов в фабрике хоста, применяемой с расширениями для перезапуска процесса, поскольку при повторных попытках, создании аварийного дампа или дампа зависания фабрика может вызываться в управляющем и дочерних процессах.

Important

API конфигурации и размещения используют идентификатор диагностики TPEXP и могут измениться в одном из будущих выпусков. Они доступны в пакетах предварительной версии MTP 2.5.