Compartir a través de


Creación de extensiones personalizadas

Este artículo es para desarrolladores que crean marcos de pruebas personalizados o extensiones para Microsoft.Testing.Platform.

Nota:

Para obtener código de ejemplo completo, consulte TestingPlatformExamples en el repositorio de Microsoft Test Framework.

Resumen del punto de extensión

Punto de extensión En/Fuera del proceso Propósito
ITestFramework En proceso La única extensión obligatoria. Detecta y ejecuta pruebas.
IDataConsumer En proceso Se suscribe a los datos de prueba y los procesa desde el bus de mensajes.
ITestSessionLifetimeHandler En proceso Ejecuta el código antes y después de una sesión de prueba.
ITestApplicationLifecycleCallbacks En proceso Ejecuta código al principio y al final del host de prueba.
ICommandLineOptionsProvider Ambos Agrega opciones de línea de comandos personalizadas.
ITestHostEnvironmentVariableProvider Fuera de proceso Establece las variables de entorno antes de que se inicie el host de prueba.
ITestHostProcessLifetimeHandler Fuera del proceso Observa externamente el proceso del servidor para pruebas.

Extensiones dentro del proceso frente a extensiones fuera de proceso

Las extensiones se clasifican en dos tipos:

  • Las extensiones en proceso se ejecutan dentro del proceso de host de prueba, junto con el marco de pruebas. Regístrelos a través de builder.TestHost:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHost.AddXXX(/* ... */);
    
  • Las extensiones fuera de proceso se ejecutan en un proceso independiente que observa el host de prueba. Regístrelos a través de builder.TestHostControllers:

    var builder = await TestApplication.CreateBuilderAsync(args);
    builder.TestHostControllers.AddXXX(/* ... */);
    

Las extensiones fuera de proceso son necesarias cuando:

  • Debe establecer variables de entorno antes de que se inicie el host de prueba.
  • Debe supervisar el host de prueba externamente porque el código de usuario podría bloquearse o bloquear el proceso.

Cuando se registra cualquier extensión fuera del proceso, la plataforma inicia automáticamente un segundo proceso.

Interfaz IExtension

Todos los puntos de extensión heredan de IExtension, que proporciona identificación e inclusión/exclusión:

public interface IExtension
{
    string Uid { get; }
    string Version { get; }
    string DisplayName { get; }
    string Description { get; }
    Task<bool> IsEnabledAsync();
}
  • Uid: un identificador único para la extensión. Elija un valor único para evitar conflictos.
  • Version: La versión de la extensión, usando el versionado semántico.
  • DisplayName: nombre descriptivo que aparece en los registros y en la --info salida.
  • Description: descripción que aparece en la --info salida.
  • IsEnabledAsync(): devuelve false para excluir la extensión de la sesión. Normalmente, las decisiones se basan en opciones de configuración o de línea de comandos.
  • Crear un marco de pruebas: cree una implementación personalizada ITestFramework , controle las solicitudes y informe de los resultados de las pruebas.
  • Extensiones de desarrollo: Cree extensiones en proceso y fuera de proceso, como consumidores de datos, controladores de sesión y monitores de procesos.
  • VSTest Bridge: simplifica la migración de marcos de pruebas existentes basados en VSTest a Microsoft.Testing.Platform.
  • Funcionalidades: declarar y consultar las funcionalidades del marco de trabajo y la extensión.
  • Servicios: configuración de acceso, registro, bus de mensajes y otros servicios de plataforma.