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.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Nota:
/3.3.1
se da como ejemplo, ya que es la primera versión del SDK, pero se puede reemplazar con 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.3.1"
}
}
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:
Default
: habilita las extensiones recomendadas para esta versión de MSTest.SDK. Este es el valor predeterminado cuando la propiedad no se establece explícitamente.None
: no hay extensiones habilitadas.AllMicrosoft
: habilita todas las extensiones suministradas por Microsoft (incluidas las extensiones con una licencia restrictiva).
Este es un ejemplo completo de uso del perfil None
:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
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.3.1">
<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.3.1">
<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.3.1"
}
}
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"'