Visão geral do SDK do MSTest

Introduzido no .NET 9, o MSTest.Sdk é um SDL de projeto do MSBuild para criar aplicativos MSTest. É possível criar um aplicativo MSTest sem esse SDK, no entanto, o SDK do MSTest é:

  • Adaptado para fornecer uma experiência de primeira classe para testes com o MSTest.
  • O destino recomendado para a maioria dos usuários.
  • Fácil de configurar para outros usuários.

O MSTest SDK descobre e executa seus testes usando o MSTest runner.

Para habilitar MSTest.Sdk em um projeto, basta atualizar o atributo Sdk do nó Project do seu projeto:

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

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

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

</Project>

Observação

/3.3.1 é dado como exemplo, pois é a primeira versão do SDK, mas pode ser substituído por qualquer versão mais recente.

Para simplificar o gerenciamento das versões, recomendamos definir a versão do SDK no nível da solução usando o arquivo global.json. Por exemplo, seu arquivo de projeto teria a seguinte aparência:

<Project Sdk="MSTest.Sdk">

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

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

</Project>

Em seguida, especifique a versão do MSTest.Sdk no arquivo global.json da seguinte maneira:

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

Para obter mais informações, confira Usar os SDKs do projeto do MSBuild.

Quando você build cria o projeto, todos os componentes necessários são restaurados e instalados usando o fluxo de trabalho padrão do NuGet definido pelo seu projeto.

Você não precisa de mais nada para criar e executar seus testes e pode usar as mesmas ferramentas (por exemplo, dotnet test ou Visual Studio) usadas por um projeto MSTest "clássico".

Importante

Ao alternar para o MSTest.Sdk, você opta por usar o executor do MSTest, inclusive com o teste dotnet. Isso requer a modificação das suas chamadas de CI e CLI local e também afeta as entradas disponíveis de .runsettings. É possível usar MSTest.Sdk e ainda manter as integrações e ferramentas antigas alternando o executor.

Selecionar o executor

Por padrão, o SDK do MSTest depende do executor do MSTest, mas você pode alternar para o VSTest adicionando a propriedade <UseVSTest>true</UseVSTest>.

Estender o MSTest Runner

Você pode personalizar a experiência MSTest runner por meio de um conjunto de extensões de pacote NuGet. Para simplificar e melhorar essa experiência, o SDK do MSTest apresenta dois recursos:

Perfil do executor do MSTest

O conceito de perfis permite selecionar o conjunto padrão de configurações e extensões que serão aplicadas ao seu projeto de teste.

Você pode definir o perfil usando a propriedade TestingExtensionsProfile com um dos três perfis a seguir:

  • Default – Habilita as extensões recomendadas para esta versão do MSTest.SDK. Esse é o padrão quando a propriedade não é definida explicitamente.
  • None - Nenhuma extensão está habilitada.
  • AllMicrosoft - Habilitar todas as extensões enviadas pela Microsoft (incluindo extensões com uma licença restritiva).

Aqui está um exemplo completo, usando o 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>

Habilitar ou desabilitar extensões

As extensões podem ser habilitadas e desabilitadas pelas propriedades do MSBuild com o padrão Enable[NugetPackageNameWithoutDots].

Por exemplo, para habilitar a extensão de despejo de memória (pacote NuGet Microsoft.Testing.Extensions.CrashDump), você pode usar a seguinte propriedade EnableMicrosoftTestingExtensionsCrashDump definida como 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 obter uma lista de todas as extensões disponíveis, consulte Extensões Microsoft.Testing.Platform.

Aviso

É importante revisar os termos de licenciamento de cada extensão, pois eles podem variar.

As extensões habilitadas e desabilitadas são combinadas com as extensões fornecidas pelo perfil de extensão selecionado.

Esse padrão de propriedade pode ser usado para habilitar uma extensão adicional, além do perfil implícito Default (como visto no exemplo anterior de CrashDumpExtension).

Você também pode desabilitar uma extensão proveniente do perfil selecionado. Por exemplo, desabilite a MS Code Coverage extensão definindo <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>

Recursos

Além da seleção do executor e das extensões específicas do executor, MSTest.Sdk também fornece recursos adicionais para simplificar e aprimorar sua experiência de teste.

Teste com o .NET Aspire

.NET Aspire é uma pilha pronta para a nuvem e opinante para criar aplicativos distribuídos, prontos para produção e observáveis. O .NET Aspire é entregue por meio de uma coleção de pacotes NuGet que lidam com preocupações específicas nativas da nuvem. Para obter mais informações, consulte os documentos do .NET Aspire.

Observação

Esse recurso está disponível a partir do MSTest.Sdk 3.4.0

Ao definir a propriedade EnableAspireTesting como true, você pode trazer todas as dependências e diretivas padrão using necessárias para testes com Aspire e MSTest.

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

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

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

</Project>

Teste com o Playwright

O Playwright oferece testes de ponta a ponta confiáveis para aplicativos Web modernos. Para obter mais informações, consulte os documentos oficiais do Playwright.

Observação

Esse recurso está disponível a partir do MSTest.Sdk 3.4.0

Ao definir a propriedade EnablePlaywright como true, você pode trazer todas as dependências e diretivas padrão using necessárias para testes com Playwright e MSTest.

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

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

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

</Project>

Migrar para o SDK do MSTest

Considere as etapas a seguir necessárias para migrar para o SDK do MSTest.

Atualizar seus arquivos de projeto

Ao migrar um projeto de teste MSTest existente para o SDK do MSTest, comece substituindo a entrada Sdk="Microsoft.NET.Sdk" na parte superior do projeto de teste por Sdk="MSTest.Sdk"

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

Adicione a versão à sua global.json:

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

Em seguida, você pode começar a simplificar seu projeto.

Remover as propriedades padrão:

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

Remover as referências de pacote padrão:

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

Finalmente, com base no perfil de extensões que você está usando, você também pode remover alguns dos pacotes Microsoft.Testing.Extensions.*.

Atualizar sua CI

Depois de atualizar seus projetos, se você estiver usando MSTest runner (padrão) e se depender de dotnet test para executar seus testes, atualize sua configuração de CI. Para obter mais informações e orientar sua compreensão de todas as alterações necessárias, consulte integração de teste dotnet.

Veja um exemplo de atualização ao usar a tarefa DotNetCoreCLI no 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"'

Confira também