Compartir vía


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.

El SDK de MSTest descubre y ejecuta sus pruebas usando el Ejecutor de MSTest.

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

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

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

    <!-- references to the code to test -->

</Project>

Nota:

/3.6.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>

    <!-- references to the code to test -->

</Project>

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

{
    "msbuild-sdks": {
        "MSTest.Sdk": "3.6.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, incluido con la prueba dotnet. 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.

Selección del ejecutor

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

Extensión del ejecutor de MSTest

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

Perfil del ejecutor de MSTest

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.6.3">

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

    <!-- references to the code to test -->

</Project>
Extensión/Perfil Ninguno Predeterminado AllMicrosoft
Cobertura de código ✔️ ✔️
Volcado de memoria ✔️
Fakes ✔️ (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.6.3">

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

<!-- references to the code to test -->

</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.6.3">

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

    <!-- references to the code to test -->

</Project>

Características

Fuera 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 pruebas.

Prueba con .NET Aspire

.NET Aspire es una pila con opinión preparada para la nube para compilar aplicaciones observables, listas para producción y distribuidas. .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>

    <!-- references to the code to test -->

</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>

    <!-- references to the code to test -->

</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.6.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.*.

Actualización de la CI

Una vez que haya actualizado sus proyectos, si está utilizando MSTest runner (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.

Esta es una actualización de ejemplo al usar la tarea DotNetCoreCLI en Azure DevOps:

\- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**/**.sln'
-    arguments: '--configuration Release'
+    arguments: '--configuration Release -p:TestingPlatformCommandLineArguments="--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