Integración de Microsoft.Extensions

Estas extensiones sirven de puente entre Microsoft.Testing.Platform (MTP) y las bibliotecas Microsoft.Extensions.* que su aplicación ya utiliza, por lo que los componentes de la plataforma y de las extensiones se integran en la misma infraestructura que el resto de su código. Cada extensión requiere un paquete NuGet adicional, como se describe en cada sección.

Sugerencia

Al usar Microsoft. Testing.Platform.MSBuild, el paquete de registro se registra automáticamente con un punto de entrada generado. El paquete de configuración requiere una IConfiguration instancia y el paquete de hospedaje requiere TestingPlatformHostFactory o un punto de entrada personalizado, por lo que sigue sus secciones de registro.

Puente de registro

El puente de registro envía los registros de diagnóstico de Microsoft.Testing.Platform a ILogger, para que los registros de la plataforma y de la extensión pasen por la misma canalización Microsoft.Extensions.Logging que ya usa la aplicación. Puede reutilizar una infraestructura de registro existente — Console, Debug, Serilog, Application Insights, OpenTelemetry o un ILoggerProvider personalizado — sin necesidad de escribir un proveedor de registro de MTP personalizado. Esta extensión requiere el paquete NuGet Microsoft.Testing.Extensions.Logging.

Note

Disponible en MTP a partir de la versión 2.3.0. Esta extensión es experimental y sus opciones y formato de salida pueden cambiar en una versión futura.

El puente reenvía cada mensaje solo cuando está habilitado el registro de diagnóstico de la plataforma. Cuando el nivel de registro efectivo de la plataforma es None (el valor predeterminado, a menos que se pase --diagnostic), no se invoca el delegado de configuración y no se crea ninguna factoría de registradores. Los filtros por categoría que establezca en ILoggingBuilder pueden restringir el nivel de diagnóstico efectivo de la plataforma, pero no pueden ampliarlo.

Registro manual

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

Instantánea de configuración

El paquete experimental Microsoft.Testing.Extensions.Configuration añade una instantánea de solo lectura de un IConfiguration propiedad de la aplicación a la canalización de configuración de MTP.

Registre la configuración antes de compilar la aplicación de prueba:

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

De forma predeterminada, la instantánea usa el orden 2. Los valores de línea de comandos de MTP (orden 0) y las variables de entorno (orden 1) tienen prioridad, mientras que la instantánea tiene prioridad sobre testconfig.json (orden 3). Pase un orden diferente cuando la aplicación requiera otra prioridad.

MTP lee la instantánea cuando BuildAsync crea el canal de configuración. Los cambios posteriores y las notificaciones de recarga no se propagan. El autor de la llamada conserva la propiedad de la configuración, las claves jerárquicas mantienen el delimitador estándar : y el registro solo se aplica al proceso actual. Un objeto de configuración activo no se transmite a un controlador o proceso host de pruebas iniciado por separado.

Integración del host

El paquete experimental Microsoft.Testing.Extensions.Hosting ejecuta MTP dentro de un IHost propiedad de la aplicación. El host sigue siendo la raíz de composición y controla su proveedor de servicios, la configuración, el sistema de registro, los proveedores de OpenTelemetry, el ciclo de vida y la liberación de recursos.

Para un punto de entrada generado, configure TestingPlatformHostFactory con un método estático con nombre completo que devuelva una nueva instancia de Task<IHost> sin iniciar:

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

Establezca TestingPlatformOpenTelemetryMode en HostOwned cuando el host es propietario de los proveedores de OpenTelemetry y el proyecto de prueba hace referencia a Microsoft.Testing.Extensions.OpenTelemetry. El punto de entrada generado crea y elimina el host, conserva las extensiones registradas automáticamente y omite la fábrica para la línea de comandos --help y --info.

Para un punto de entrada personalizado, llame a RunTestingPlatformAsync en el host y registre el framework de pruebas mediante su función de devolución de llamada. El método importa una instantánea de configuración, reenvía los diagnósticos de MTP al ILoggerFactory del host, inicia el host antes que MTP, vincula la cancelación del host y del proceso llamante a MTP, devuelve el código de salida de MTP y detiene el host en un bloque finally. El proceso llamante sigue encargándose de la liberación del host.

Mantener la salida estándar libre de mensajes de inicio, apagado, registro y exportación del host, ya que MTP la usa para modos de lectura mecánica, como --list-tests json, el modo servidor JSON-RPC y el protocolo dotnet test. Evita también los recursos globales exclusivos en una fábrica de hosts utilizada con extensiones de reinicio de procesos, ya que los escenarios de reintento, volcado de memoria por fallo o volcado de memoria por bloqueo podrían invocar la fábrica en los procesos controladores y secundarios.

Importante

La configuración y las API de hospedaje usan el TPEXP identificador de diagnóstico y pueden cambiar en una versión futura. Están disponibles en los paquetes de versión preliminar de MTP 2.5.