Visão geral do SDK do MSTest
MSTest.Sdk é um SDK de projeto MSBuild para a criação 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"'