Ejecución de pruebas con MSTest

Sugerencia

Antes de elegir una configuración de ejecutor, consulte Introducción a las plataformas de prueba.

Hay varias maneras de ejecutar pruebas de MSTest en función de las necesidades. Puede ejecutar pruebas desde un IDE (por ejemplo, Visual Studio, Visual Studio Code o JetBrains Rider), o desde la línea de comandos, o desde un servicio de CI (como Acciones de GitHub o Azure DevOps).

Históricamente, MSTest se basaba en VSTest para ejecutar pruebas en todos los contextos, pero a partir de la versión 3.2.0, MSTest tiene su propio ejecutor de pruebas. Este nuevo ejecutor es más ligero y más rápido que VSTest, y es la manera recomendada de ejecutar pruebas de MSTest.

VSTest frente a MTP

MSTest admite la ejecución de pruebas con VSTest y Microsoft.Testing.Platform (MTP). La compatibilidad con MTP se basa en el ejecutor de MSTest, que puede ejecutar pruebas en todos los contextos (por ejemplo, canales de integración continua (IC), CLI, Explorador de Pruebas de Visual Studio y Explorador de Texto de VS Code). El ejecutor de MSTest se inserta directamente en los proyectos de prueba de MSTest y no hay otras dependencias de la aplicación, como vstest.console o dotnet test, necesarias para ejecutar las pruebas. Sin embargo, todavía puede ejecutar las pruebas mediante dotnet test.

El ejecutor de MSTest se código abierto y se basa en la biblioteca MTP. Puede encontrar código Microsoft.Testing.Platform en el repositorio microsoft/testfx GitHub. El ejecutor de pruebas MSTest viene incluido con MSTest in 3.2.0 o una versión más reciente.

Con el SDK de .NET 10 y versiones posteriores, seleccione el modo MTP dedicado de dotnet test en global.json. A partir de .NET 11, puede invalidar esa selección para el proceso actual con la variable de DOTNET_TEST_RUNNER entorno. Para conocer las entradas admitidas, los requisitos de la versión del SDK y las opciones específicas de MTP, consulte dotnet test con MTP.

Detección y ejecución de pruebas mediante programación

Para una interfaz de usuario de prueba personalizada, un servicio de prueba de integración o un generador de informes, elija la interfaz que coincida con la plataforma de prueba:

Requirement Interfaz Details
Detecte y ejecute pruebas de MTP desde código .NET, con metadatos y resultados en tiempo real. Cliente en modo servidor de MTP A partir de MTP 2.4, Microsoft.Testing.Platform.ServerMode.Client.Sources proporciona métodos de detección y ejecución tipados. El paquete inserta tipos internos de C#; otros lenguajes .NET pueden llamar a un contenedor de C#.
Detecte pruebas de MTP mediante un proceso de línea de comandos y utilice metadatos estructurados. --list-tests json Disponible en MTP 2.3 o posterior. Lea el documento JSON y, a continuación, ejecute pruebas seleccionadas con --filter-uid. El formato de texto no es una API legible por máquina.
Mantenga una integración existente de ejecución y detección de VSTest. Microsoft.TestPlatform.TranslationLayer Use VsTestConsoleWrapper con vstest.console y un adaptador de VSTest compatible. El contenedor utiliza el protocolo VSTest, no el protocolo nativo de MTP.
Consumir metadatos de prueba o generar informes personalizados dentro del proceso de prueba. Extensiones de MTP Implemente una IDataConsumer para procesar los mensajes que publica un marco de pruebas. Este punto de extensión no es una API de cliente de pruebas externo.

MTP admite la detección y la ejecución. No es necesario analizar la salida del terminal ni crear un contenedor Process.Start para utilizar su cliente en modo de servidor con establecimiento de tipos. Para ver un ejemplo completo de C# y un código de llamada en Visual Basic, consulte Detectar y ejecutar pruebas desde .NET.

La detección puede incluir categorías de MSTest y metadatos personalizados TestProperty . Los campos disponibles dependen del marco y del mecanismo de transporte; ninguna de las dos API serializa todas las propiedades arbitrarias almacenadas en memoria. Consulte Consumir actualizaciones y metadatos.

Para una integración VsTestConsoleWrapper existente, mantenga la configuración del proyecto y el adaptador compatibles con VSTest hasta que migre el cliente. La compatibilidad de VSTest de un marco no convierte la capa de traducción de VSTest en un cliente para cada aplicación de prueba de MTP. Para ver el alcance de la capa de compatibilidad, consulte VSTest Bridge.

Habilitación de MTP en un proyecto de MSTest

Use el SDK de MSTest para simplificar considerablemente la configuración del proyecto, la administración de versiones y la alineación de MTP y sus extensiones.

MSTest.Sdk sustituye a Microsoft.NET.Sdk como SDK del proyecto y MTP está habilitado de forma predeterminada:

<Project Sdk="MSTest.Sdk/4.1.0">

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

</Project>

Note

MSTest.Sdk solo funciona cuando el proyecto puede usar Microsoft.NET.Sdk como SDK base. Si el project requiere un SDK diferente, no reemplace el <Project Sdk="..."> valor por MSTest.Sdk.

Por ejemplo, algunos proyectos de prueba de integración de ASP.NET Core usan Microsoft.NET.Sdk.Web. MSTest.Sdk deriva de Microsoft.NET.Sdk, por lo que no importa los objetivos del SDK de ASP.NET Core que Microsoft.NET.Sdk.Web proporciona.

También puede configurar MSTest manualmente en lugar de usar MSTest.Sdk. La configuración manual es necesaria cuando el proyecto necesita un SDK de nivel superior diferente (por ejemplo, Microsoft.NET.Sdk.Web), pero también puede elegirlo con el estándar Microsoft.NET.Sdk. Agregue la propiedad EnableMSTestRunner y establezca OutputType en Exe en el archivo del proyecto. A continuación, agregue las referencias de MSTest que requiere el proyecto. Asegúrese de que usa MSTest 3.2.0 o posterior y actualice a la versión más reciente de MSTest disponible.

Considere el siguiente archivo de proyecto de ejemplo:

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

  <PropertyGroup>
    <!-- Enable Microsoft.Testing.Platform, this is an opt-in feature -->
    <EnableMSTestRunner>true</EnableMSTestRunner>
    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>

    <!--
      Displays error on console in addition to the log file. Note that this feature comes with a performance impact.
      For more information, visit https://learn.microsoft.com/dotnet/core/testing/unit-testing-with-dotnet-test#show-failure-per-test
      -->
    <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>

    <OutputType>Exe</OutputType>

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

  <ItemGroup>
    <!--
      MSTest meta package is the recommended way to reference MSTest.
      It's equivalent to referencing:
          Microsoft.NET.Test.Sdk
          MSTest.TestAdapter
          MSTest.TestFramework
          MSTest.Analyzers
      Starting with 3.8, it also includes:
          Microsoft.Testing.Extensions.TrxReport
          Microsoft.Testing.Extensions.CodeCoverage
    -->
    <PackageReference Include="MSTest" Version="4.1.0" />
  </ItemGroup>

</Project>

Sugerencia

Para asegurarse de que todos los proyectos de prueba de la solución usan el ejecutor de MSTest, establezca las propiedades EnableMSTestRunner y TestingPlatformDotnetTestSupport en Directory.Build.props en lugar de archivos project individuales.

Configuraciones y filtros

.runsettings

MTP admite runsettings a través de la opción --settingsde línea de comandos . Para obtener la lista completa de entradas de MSTest admitidas, consulte Configuración de MSTest: Runsettings. Los siguientes comandos muestran varios ejemplos de uso.

Uso de dotnet run:

dotnet run --project Contoso.MyTests -- --settings config.runsettings

Uso de dotnet exec:

dotnet exec Contoso.MyTests.dll --settings config.runsettings

O bien:

dotnet Contoso.MyTests.dll --settings config.runsettings

Usando el archivo ejecutable:

Contoso.MyTests.exe --settings config.runsettings

Filtro de pruebas

Puede proporcionar el filtro de pruebas sin problemas mediante la opción --filterde línea de comandos . Los siguientes comandos muestran algunos ejemplos.

Uso de dotnet run:

dotnet run --project Contoso.MyTests -- --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

Uso de dotnet exec:

dotnet exec Contoso.MyTests.dll --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

O bien:

dotnet Contoso.MyTests.dll --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

Usando el archivo ejecutable:

Contoso.MyTests.exe --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

Consulte también