Introducción a Microsoft.Testing.Platform

Microsoft.Testing.Platform es una alternativa ligera y portátil a VSTest para ejecutar pruebas en todos los contextos, incluidas canalizaciones de integración continua (CI), CLI, Explorador de pruebas de Visual Studio y Explorador de texto de VS Code. Microsoft.Testing.Platform se inserta directamente en los proyectos de prueba y no hay dependencias de otras aplicaciones, como vstest.console o dotnet test necesarias para ejecutar las pruebas.

Microsoft.Testing.Platform es de código abierto. Puede encontrar el código Microsoft.Testing.Platform en el repositorio de GitHub microsoft/testfx.

Pilares de Microsoft.Testing.Platform

Esta nueva plataforma de pruebas se basa en la experiencia del equipo de pruebas de experiencia para desarrolladores de .NET y tiene como objetivo abordar los desafíos encontrados desde el lanzamiento de .NET Core en 2016. Aunque hay un alto nivel de compatibilidad entre .NET Framework y .NET Core/.NET, algunas características clave como el sistema de complementos y los nuevos factores de forma posibles de compilaciones de .NET han hecho que evolucione o admita completamente la nueva característica en tiempo de ejecución con la arquitectura actual de la plataforma VSTest.

Los principales factores de conducción para la evolución de la nueva plataforma de pruebas se detallan en lo siguiente:

  • Determinismo: asegurarse de que la ejecución de las mismas pruebas en contextos diferentes (local, CI) generará el mismo resultado. El nuevo entorno de ejecución no se basa en la reflexión ni en ninguna otra característica dinámica del entorno de ejecución de .NET para coordinar una ejecución de prueba.

  • Transparencia en tiempo de ejecución: el entorno de ejecución de prueba no interfiere con el código del marco de pruebas, no crea contextos aislados como AppDomain o AssemblyLoadContext, y no usa solucionadores de ensamblados personalizados ni reflexión.

  • Registro en tiempo de compilación de extensiones: las extensiones, como marcos de pruebas y extensiones dentro y fuera de proceso, se registran durante el tiempo de compilación para garantizar el determinismo y para facilitar la detección de incoherencias.

  • Dependencias cero: el núcleo de la plataforma es un único ensamblado de .NET, , Microsoft.Testing.Platform.dllque no tiene dependencias distintas de los entornos de ejecución admitidos.

  • Hostable: el entorno de ejecución de prueba se puede hospedar en cualquier aplicación de .NET. Aunque normalmente se usa una aplicación de consola para ejecutar pruebas, puede crear una aplicación de prueba en cualquier tipo de aplicación .NET. Esto le permite ejecutar pruebas en contextos especiales, como dispositivos o exploradores, donde puede haber limitaciones.

  • Compatibilidad con todos los factores de forma de .NET: admita los factores de forma actuales y futuros de .NET, incluido AOT nativo.

  • Rendimiento: búsqueda del equilibrio adecuado entre características y puntos de extensión para evitar el sobredimensionamiento del tiempo de ejecución con código no fundamental. La nueva plataforma de prueba está diseñada para "orquestar" una ejecución de pruebas, en lugar de proporcionar detalles de implementación sobre cómo hacerlo.

  • Lo suficientemente extensible: la nueva plataforma se basa en puntos de extensibilidad para permitir la personalización máxima de la ejecución en tiempo de ejecución. Permite configurar el host del proceso de prueba, observar el proceso de prueba y consumir información del marco de pruebas dentro del proceso de host de prueba.

  • Implementación de módulo único: la característica de hospedaje permite un modelo de implementación de módulo único, donde se puede usar un único resultado de compilación para admitir todos los puntos de extensibilidad, tanto fuera de proceso como en proceso, sin necesidad de enviar módulos ejecutables diferentes.

Marcos de prueba admitidos

  • MSTest. En MSTest, la compatibilidad de Microsoft.Testing.Platform se realiza a través del ejecutor de MSTest.
  • NUnit. En NUnit, la compatibilidad de Microsoft.Testing.Platform se realiza a través del Ejecutor de NUnit.
  • xUnit.net: en xUnit.net, el soporte de Microsoft.Testing.Platform se realiza a través del ejecutor de xUnit.net.
  • TUnit: construido completamente sobre la Microsoft.Testing.Platform. Para obtener más información, consulte la documentación sobre TUnit

Ejecución y depuración de pruebas

Los proyectos de prueba Microsoft.Testing.Platform se compilan como ejecutables que se pueden ejecutar (o depurar) directamente. No hay ninguna consola o comando adicionales de serie de pruebas. La aplicación sale con un código de salida distinto de cero si hay un error, como suele ser la mayoría de los ejecutables. Para obtener más información sobre los códigos de salida conocidos, vea Códigos de salida de Microsoft.Testing.Platform.

Importante

De forma predeterminada, Microsoft.Testing.Platform recopila datos de telemetría. Para obtener más información y opciones sobre la exclusión, vea Telemetría de Microsoft.Testing.Platform.

Publicar el proyecto de prueba mediante dotnet publish y ejecutar la aplicación directamente es otra manera de ejecutar las pruebas. Por ejemplo, ejecutando el ./Contoso.MyTests.exe. En algunos escenarios también es viable usar dotnet build para generar el archivo ejecutable, pero puede haber casos perimetrales que se deben tener en cuenta, como AOT nativo.

Use dotnet run

El comando dotnet run se puede usar para compilar y ejecutar el proyecto de prueba. Esta es la manera más sencilla, aunque a veces más lenta, de ejecutar las pruebas. El uso de dotnet run es práctico al editar y ejecutar pruebas localmente, ya que garantiza que el proyecto de prueba se vuelva a compilar cuando sea necesario. dotnet run también buscará automáticamente el proyecto en la carpeta actual.

dotnet run --project Contoso.MyTests

Para obtener más información sobre dotnet run, consulte ejecución de dotnet.

Use dotnet exec

El comando dotnet exec o dotnet se usa para ejecutar un proyecto de prueba ya compilado; es una alternativa a ejecutar la aplicación directamente. dotnet exec requiere la ruta de acceso al archivo DLL del proyecto de prueba compilado.

dotnet exec Contoso.MyTests.dll

o

dotnet Contoso.MyTests.dll

Nota:

Si se proporciona la ruta de acceso al archivo ejecutable del proyecto de prueba (*.exe) se produce un error:

Error:
  An assembly specified in the application dependencies manifest
  (Contoso.MyTests.deps.json) has already been found but with a different
  file extension:
    package: 'Contoso.MyTests', version: '1.0.0'
    path: 'Contoso.MyTests.dll'
    previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net8.0\Contoso.MyTests.exe'

Para obtener más información en dotnet exec, consulte ejecución de dotnet.

Use dotnet test

Microsoft.Testing.Platform ofrece una capa de compatibilidad con vstest.console.exe y dotnet test garantiza que puede ejecutar las pruebas como antes al habilitar un nuevo escenario de ejecución.

dotnet test Contoso.MyTests.dll

Opciones

En la lista siguiente se describen solo las opciones de la plataforma. Para ver las opciones específicas que aporta cada extensión, consulte la página de documentación de la extensión o use la opción --help.

  • --diagnostic

Habilita el registro de diagnóstico. El nivel de registro predeterminado es Trace. El archivo se escribe en el directorio de salida con el siguiente formato de nombre: log_[MMddHHssfff].diag.

  • --diagnostic-filelogger-synchronouswrite

Obliga al registrador de archivos integrado a escribir registros de forma sincrónica. Resulta útil para escenarios en los que no desea perder ninguna entrada de registro (si el proceso se bloquea). Esto ralentiza la ejecución de la prueba.

  • --diagnostic-output-directory

El directorio de salida del registro de diagnóstico; si no se especifica, el archivo se genera en el directorio predeterminado TestResults.

  • --diagnostic-output-fileprefix

Prefijo del nombre del archivo de registro. Tiene como valor predeterminado "log_".

  • --diagnostic-verbosity

Define el nivel de detalle cuando se usa el modificador --diagnostic. Los valores disponibles son Trace, Debug, Information, Warning, Error o Critical.

  • --help

Imprime una descripción de cómo usar el comando.

  • -ignore-exit-code

Permite omitir algunos códigos de salida distintos de cero y, en su lugar, devolverlos como 0. Para obtener más información, consulte Omisión de códigos de salida específicos.

  • --info

Muestra información avanzada sobre la aplicación de prueba de .NET, como:

  • La plataforma.
  • El entorno.
  • Cada proveedor de línea de comandos registrado, como name, version, description y options.
  • Cada herramienta registrada, como command, name, version, description, y todos los proveedores de línea de comandos.

Esta característica se usa para comprender las extensiones que registrarían la misma opción de línea de comandos o los cambios en las opciones disponibles entre varias versiones de una extensión (o la plataforma).

  • --list-tests

Enumerar las pruebas disponibles. Las pruebas no se ejecutarán.

  • --minimum-expected-tests

Especifica el número mínimo de pruebas que se espera que se ejecuten. De forma predeterminada, se espera que se ejecute al menos una prueba.

  • --results-directory

El directorio donde se guardarán los resultados de pruebas. Si el directorio especificado no existe, se crea. El valor predeterminado es TestResults en el directorio que contiene la aplicación de prueba.

Integración de MSBuild

El paquete de NuGet Microsoft.Testing.Platform.MSBuild aporta diferentes integraciones para Microsoft.Testing.Platform con MSBuild:

  • Compatibilidad con dotnet test Para obtener más información, consulte Integración de pruebas de dotnet.
  • Compatibilidad con ProjectCapability, que necesitan los exploradores de pruebas de Visual Studio y Visual Studio Code.
  • Generación automática del punto de entrada (método Main).
  • Generación automática del archivo de configuración.

Nota:

Esta integración funciona de forma transitiva (un proyecto que hace referencia a otro proyecto que hace referencia a este paquete responderá como si hiciera referencia al paquete) y se pueda deshabilitar a través de la propiedad IsTestingPlatformApplication de MSBuild.

Consulte también