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.