Compartir vía


Uso de Microsoft.Testing.Platform con dotnet test

En este artículo se describe cómo usar dotnet test para ejecutar pruebas al usar Microsoft.Testing.Platform y las distintas opciones disponibles para configurar la salida de MSBuild generada al ejecutar pruebas a través de Microsoft.Testing.Platform.

En este artículo se muestra cómo usar dotnet test para ejecutar todas las pruebas de una solución (*.sln) que usa Microsoft.Testing.Platform.

Integración de dotnet test

El comando dotnet test es una manera de ejecutar pruebas desde soluciones, proyectos o ensamblados ya compilados. Microsoft.Testing.Platform se enlaza a esta infraestructura para proporcionar una manera unificada de ejecutar pruebas, especialmente al migrar de VSTest a Microsoft.Testing.Platform.

Integración de dotnet test: modo VSTest

Microsoft.Testing.Platform proporciona una capa de compatibilidad (VSTest Bridge) para trabajar con dotnet test sin problemas.

Las pruebas se pueden realizar mediante la ejecución de:

dotnet test

Esta capa ejecuta pruebas a través de VSTest y se integra con ella en el nivel adaptador del marco de pruebas de VSTest.

dotnet test: modo Microsoft.Testing.Platform

De forma predeterminada, dotnet test usa el comportamiento de VSTest para ejecutar pruebas. Puede habilitar la compatibilidad con Microsoft.Testing.Platform en dotnet test especificando la configuración de <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport> en el archivo de proyecto.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>

    <OutputType>Exe</OutputType>
    <EnableMSTestRunner>true</EnableMSTestRunner>

    <!-- Add this to your project file. -->
    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>

  </PropertyGroup>

  <!-- ... -->

</Project>

Nota:

Se recomienda encarecidamente establecer la propiedad TestingPlatformDotnetTestSupport en Directory.Build.props. De este modo, no tiene que agregarlo a cada archivo de proyecto de prueba y no corre el riesgo de introducir un nuevo proyecto que no establezca esta propiedad y termine con una solución donde algunos proyectos son VSTest, mientras que otros son Microsoft.Testing.Platform, que puede que no funcione correctamente y que no sea un escenario admitido.

Importante

A pesar de establecer TestingPlatformDotnetTestSupport en true, la mayoría de las opciones de línea de comandos definidas en la prueba dotnet permanecen orientadas a VSTest y no afectan a las pruebas basadas en Microsoft.Testing.Platform. Para proporcionar argumentos para Microsoft.Testing.Platform, debe usar uno de los métodos descritos en argumentos de línea de comandos Microsoft.Testing.Platform con prueba dotnet.

En la lista siguiente se describen todas las opciones de línea de comandos de dotnet test compatibles con Microsoft.Testing.Platform:

  • -a|--arch <ARCHITECTURE>
  • --artifacts-path <ARTIFACTS_DIR>
  • -c|--configuration <CONFIGURATION>
  • -f|--framework <FRAMEWORK>
  • -e|--environment <NAME="VALUE">
  • --interactive
  • --no-build
  • --nologo
  • --no-restore
  • -o|--output <OUTPUT_DIRECTORY>
  • --os <OS>
  • -r|--runtime <RUNTIME_IDENTIFIER>
  • -v|--verbosity <LEVEL>

Estos argumentos se admiten porque están vinculados al paso de compilación y son independientes de la plataforma de prueba usada.

argumentos de la línea de comandos Microsoft.Testing.Platform con dotnet test

Puede proporcionar argumentos que se usan para llamar a la aplicación de prueba de una de las maneras siguientes:

  • Microsoft.Testing.Platform A partir de la versión 1.4 (incluida con MSTest versión 3.6), puede agregar opciones después del doble guión -- en la línea de comandos:

    dotnet test -- --minimum-expected-tests 10
    
  • Mediante el uso de la propiedad de MSBuild TestingPlatformCommandLineArguments en la línea de comandos:

    dotnet test -p:TestingPlatformCommandLineArguments="--minimum-expected-tests 10"
    

    O en el archivo del proyecto:

    <PropertyGroup>
      ...
      <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
    </PropertyGroup>
    

Opciones adicionales de MSBuild

La integración de MSBuild proporciona opciones que se pueden especificar en el archivo de proyecto o a través de propiedades globales en la línea de comandos, como -p:TestingPlatformShowTestsFailure=true.

Estas son las opciones disponibles:

Mostrar error por prueba

De forma predeterminada, se resumen los errores de prueba en un archivo .log y se notifica un único error por proyecto de prueba a MSBuild.

Para mostrar los errores por prueba fallida, especifique -p:TestingPlatformShowTestsFailure=true en la línea de comandos o agregue la propiedad <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure> al archivo del proyecto.

En la línea de comandos:

dotnet test -p:TestingPlatformShowTestsFailure=true

O en el archivo del proyecto:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>

    <OutputType>Exe</OutputType>
    <EnableMSTestRunner>true</EnableMSTestRunner>

    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>

    <!-- Add this to your project file. -->
    <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>

  </PropertyGroup>

  <!-- ... -->

</Project>

Mostrar la salida completa de la plataforma

De forma predeterminada, todas las salidas de la consola que escribe el ejecutable de prueba subyacente se capturan y se ocultan al usuario. Esto incluye el banner, la información de la versión y la información de la prueba con formato.

Para mostrar esta información junto con la salida de MSBuild, use <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>.

Esta opción no afecta a cómo el marco de pruebas captura la salida del usuario escrita por Console.WriteLine ni a otras formas similares de escribir en la consola.

En la línea de comandos:

dotnet test -p:TestingPlatformCaptureOutput=false

O en el archivo del proyecto:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>

    <OutputType>Exe</OutputType>
    <EnableMSTestRunner>true</EnableMSTestRunner>

    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>

    <!-- Add this to your project file. -->
    <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>

  </PropertyGroup>

  <!-- ... -->

</Project>

Importante

Todos los ejemplos anteriores agregan propiedades como EnableMSTestRunner, TestingPlatformDotnetTestSupport y TestingPlatformCaptureOutput en el archivo csproj. Sin embargo, se recomienda encarecidamente establecer estas propiedades en Directory.Build.props. De esta manera, no tiene que agregarlas a cada archivo de proyecto de prueba, y no se arriesga a introducir un nuevo proyecto que no establezca estas propiedades y terminar con una solución en la que algunos proyectos son VSTest mientras que otros son Microsoft.Testing.Platform, lo que puede no funcionar correctamente y es un escenario no soportado.