Compartir a través de


Introducción al SDK de MSTest

MSTest.Sdk es un SDK de proyecto de MSBuild para compilar aplicaciones de MSTest. Aunque se puede compilar una aplicación de MSTest sin el SDK, el SDK de MSTest:

  • Esta adaptado para proporcionar una experiencia de primera clase para realizar pruebas con MSTest.
  • Es el destino recomendado para la mayoría de los usuarios.
  • Fácil de configurar para otros usuarios.

De forma predeterminada, el SDK de MSTest detecta y ejecuta las pruebas mediante el ejecutor de MSTest para Microsoft.Testing.Platform. Puede cambiar a usar VSTest especificando <UseVSTest>true</UseVSTest>

Puede habilitar MSTest.Sdk en un proyecto simplemente actualizando el atributo Sdk del nodo Project del proyecto:

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

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

</Project>

Nota:

/3.8.3 se da como ejemplo y se puede reemplazar por cualquier versión más reciente.

Para simplificar el control de las versiones, se recomienda establecer la versión del SDK en el nivel de solución mediante el archivo global.json. Por ejemplo, el archivo del proyecto tendría el siguiente aspecto:

<Project Sdk="MSTest.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

</Project>

A continuación, especifique la versión MSTest.Sdk en el archivo global.json de la siguiente manera:

{
    "msbuild-sdks": {
        "MSTest.Sdk": "3.8.3"
    }
}

Para obtener más información, consulte Uso del SDK de proyecto de MSBuild.

Al build el proyecto, todos los componentes necesarios se restauran e instalan mediante el flujo de trabajo estándar de NuGet establecido por el proyecto.

No necesita nada más para compilar y ejecutar las pruebas y puede usar las mismas herramientas (por ejemplo, dotnet test o Visual Studio) usadas por un proyecto de MSTest "clásico".

Importante

Al cambiar a MSTest.Sdk, opta por usar el ejecutor de MSTest (habilita Microsoft.Testing.Platform para MSTest), incluso con dotnet test. Esto requiere modificar las llamadas de CI y la CLI local, y también afecta a las entradas disponibles de .runsettings. Puede usar MSTest.Sdk y mantener las integraciones y herramientas antiguas si cambia el ejecutor. De forma predeterminada, MSTest.Sdk establece EnableMSTestRunner y TestingPlatformDotnetTestSupport en true. Para obtener más información sobre la prueba de dotnet y sus diferentes modos para ejecutar Microsoft.Testing.Platform, consulte Pruebas con prueba de dotnet.

Selecciona el corredor

De forma predeterminada, el SDK de MSTest se basa en Microsoft.Testing.Platform, pero puede cambiar a VSTest agregando la propiedad <UseVSTest>true</UseVSTest>.

Extensión de Microsoft.Testing.Platform

Puede personalizar la experiencia de Microsoft.Testing.Platform mediante un conjunto de extensiones de paquete NuGet. Para simplificar y mejorar esta experiencia, el SDK de MSTest presenta dos características:

Perfil de Microsoft.Testing.Platform

El concepto de perfiles permite seleccionar el conjunto predeterminado de configuraciones y extensiones que se aplicarán al proyecto de prueba.

Puede establecer el perfil mediante la propiedad TestingExtensionsProfile con uno de los tres perfiles siguientes:

Este es un ejemplo completo de uso del perfil None:

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

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <TestingExtensionsProfile>None</TestingExtensionsProfile>
    </PropertyGroup>

</Project>
Extensión/Perfil Ninguno Predeterminado AllMicrosoft
Cobertura de código ✔️ ✔️
Volcado de memoria ✔️
Falsificaciones ✔️ (MSTest.Sdk 3.7.0+)
Volcado de memoria de bloqueo ✔️
Recarga activa ✔️
Reintentar ✔️
Trx ✔️ ✔️

Habilitación o deshabilitación de extensiones

Las propiedades de MSBuild pueden habilitar y deshabilitar las extensiones con el patrón Enable[NugetPackageNameWithoutDots].

Por ejemplo, para habilitar la extensión de volcado de memoria (paquete NuGet Microsoft.Testing.Extensions.CrashDump), puede usar la siguiente propiedad EnableMicrosoftTestingExtensionsCrashDump establecida en true:

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

<PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>

</Project>

Para obtener una lista de todas las extensiones disponibles, consulte Extensiones de Microsoft.Testing.Platform.

Advertencia

Es importante revisar los términos de licencia de cada extensión, ya que pueden variar.

Las extensiones habilitadas y deshabilitadas se combinan con las extensiones proporcionadas por el perfil de extensión seleccionado.

Este patrón de propiedad se puede usar para habilitar una extensión adicional sobre el perfil Default implícito (como se ve en el ejemplo anterior de CrashDumpExtension).

También puede deshabilitar una extensión que provenga del perfil seleccionado. Por ejemplo, deshabilite la extensión MS Code Coverage estableciendo <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>:

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

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
    </PropertyGroup>

</Project>

Características

Además de la selección del ejecutor y de las extensiones específicas del ejecutor, MSTest.Sdk también proporciona características adicionales para simplificar y mejorar la experiencia de prueba.

Prueba con .NET Aspire

.NET Aspire es una plataforma con enfoque definido, preparada para la nube, para desarrollar aplicaciones observables, distribuidas y listas para producción. .NET Aspire se entrega a través de una colección de paquetes NuGet que controlan problemas específicos nativos de la nube. Para obtener más información, consulte los documentos de .NET Aspire.

Nota:

Esta característica está disponible en MSTest.Sdk 3.4.0

Al establecer la propiedad EnableAspireTesting en true, puede traer todas las dependencias y directivas predeterminadas using que necesita para realizar pruebas con Aspire y MSTest.

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

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnableAspireTesting>true</EnableAspireTesting>
    </PropertyGroup>

</Project>

Prueba con Playwright

Playwright permite realizar pruebas de un extremo a otro de forma confiable de aplicaciones web modernas. Para obtener más información, consulte la documentación de Playwright oficial.

Nota:

Esta característica está disponible en MSTest.Sdk 3.4.0

Al establecer la propiedad EnablePlaywright en true, puede traer todas las dependencias y directivas predeterminadas using que necesita para realizar pruebas con Playwright y MSTest.

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

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnablePlaywright>true</EnablePlaywright>
    </PropertyGroup>

</Project>

Migración al SDK de MSTest

Tenga en cuenta los pasos siguientes, que son necesarios para migrar al SDK de MSTest.

Actualizar el proyecto

Para migrar un proyecto de prueba de MSTest existente al SDK de MSTest, comience reemplazando la entrada Sdk="Microsoft.NET.Sdk" en la parte superior del proyecto de prueba por Sdk="MSTest.Sdk".

- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"

Agregue la versión al global.json:

{
    "msbuild-sdks": {
        "MSTest.Sdk": "3.8.3"
    }
}

Después, puede empezar a simplificar el proyecto.

Elimine las propiedades predeterminadas:

- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>

Elimine las referencias de paquete predeterminadas:

- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"

Por último, en función del perfil de extensiones que use, también puede quitar algunos de los paquetes Microsoft.Testing.Extensions.*.

Actualice su CI

Una vez que haya actualizado sus proyectos, si está utilizando Microsoft.Testing.Platform (predeterminado) y si confía en dotnet test para ejecutar sus pruebas, debe actualizar su configuración de CI. Para obtener más información y orientarle sobre todos los cambios necesarios, consulte Integración de pruebas de dotnet.

Si usa el modo VSTest de dotnet test, aquí tiene un ejemplo de actualización al usar la tarea DotNetCoreCLI en Azure DevOps.

\- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**/**.sln'
-    arguments: '--configuration Release'
+    arguments: '--configuration Release -- --report-trx --results-directory $(Agent.TempDirectory) --coverage'

Limitaciones conocidas

Los SDK de MSBuild proporcionados por NuGet (incluido MSTest.Sdk) tienen compatibilidad limitada con herramientas cuando se trata de actualizar su versión, lo que significa que la actualización habitual de NuGet y la interfaz de usuario de Visual Studio para administrar paquetes NuGet no funciona según lo previsto. Vea este problema para obtener más información: NuGet#13127.

Nota:

Esta limitación no es específica del SDK de MSTest, sino del SDK de MSBuild proporcionado por NuGet. Dependabot controlará la actualización de la versión en el archivo global.json, pero deberá actualizar manualmente la versión en el archivo de proyecto.

Consulte también