Visão geral do SDK do MSTest
MSTest.Sdk é um SDK de projeto MSBuild para criar aplicativos MSTest. É possível criar um aplicativo MSTest sem este SDK, no entanto, o SDK MSTest é:
- Adaptado para fornecer uma experiência de primeira classe para testes com MSTest.
- O alvo recomendado para a maioria dos usuários.
- Fácil de configurar para outros usuários.
O SDK do MSTest descobre e executa seus testes usando o corredor MSTest.
Você pode habilitar MSTest.Sdk
em um projeto simplesmente atualizando o Sdk
Project
atributo do nó do seu projeto:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Nota
/3.6.3
é dado como exemplo e pode ser substituído por qualquer versão mais recente.
Para simplificar o tratamento de 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 MSTest.Sdk
versão no arquivo global.json da seguinte maneira:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.6.3"
}
}
Para obter mais informações, consulte Usar SDKs de projeto MSBuild.
Quando você build
projeta, 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 você pode usar as mesmas ferramentas (por exemplo, dotnet test
ou Visual Studio) usado por um projeto MSTest "clássico".
Importante
Ao mudar para o , você opta por usar o corredor MSTest, inclusive com o MSTest.Sdk
teste dotnet. Isso requer a modificação de suas chamadas de CI e CLI local e também afeta as entradas disponíveis das .runsettings. Você pode usar MSTest.Sdk
e ainda manter as integrações e ferramentas antigas trocando o corredor.
Selecione o corredor
Por padrão, o MSTest SDK depende do MSTest runner<UseVSTest>true</UseVSTest>
Estenda o corredor MSTest
Você pode personalizar MSTest runner
a experiência por meio de um conjunto de extensões de pacote NuGet. Para simplificar e melhorar essa experiência, o MSTest SDK apresenta dois recursos:
Perfil do corredor MSTest
O conceito de perfis permite que você selecione 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:
None
- Nenhuma extensão está ativada.Default
- Habilita as extensões recomendadas para esta versão do MSTest.SDK. Este é o padrão quando a propriedade não é definida explicitamente.Permite as seguintes extensões:
AllMicrosoft
- Habilite todas as extensões enviadas pela Microsoft (incluindo extensões com uma licença restritiva).Permite as seguintes extensões:
Aqui está um exemplo completo, usando o None
perfil:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Extensão/Perfil | Nenhum | Padrão | AllMicrosoft |
---|---|---|---|
Cobertura de Código | ✔️ | ✔️ | |
Despejo de Falhas | ✔️ | ||
Fakes | ✔️ (MSTest.Sdk 3.7.0+) | ||
Hang Dump | ✔️ | ||
Hot Reload | ✔️ | ||
Repetir | ✔️ | ||
Trx | ✔️ | ✔️ |
Ativar ou desativar 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.6.3">
<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 rever os termos de licenciamento para cada extensão, pois eles podem variar.
As extensões ativadas e desativadas 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 sobre o perfil implícito Default
(como visto no exemplo CrashDumpExtension anterior).
Você também pode desativar uma extensão proveniente do perfil selecionado. Por exemplo, desative a MS Code Coverage
extensão definindo <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>
Funcionalidades
Fora da seleção das extensões específicas do corredor e do corredor, MSTest.Sdk
também fornece recursos adicionais para simplificar e melhorar sua experiência de teste.
Teste com o .NET Aspire
O .NET Aspire é uma pilha opinativa e pronta para a nuvem para criar aplicativos observáveis, prontos para produção e distribuídos. O .NET Aspire é fornecido 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 .
Nota
Este recurso está disponível no 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 testar 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 Dramaturgo
O Playwright permite testes confiáveis de ponta a ponta para aplicativos Web modernos. Para mais informações, consulte os documentos oficiais do Dramaturgo.
Nota
Este recurso está disponível no 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 testar 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.
Atualize o seu projeto
Ao migrar um projeto de teste MSTest existente para o SDK do MSTest, comece substituindo a Sdk="Microsoft.NET.Sdk"
entrada na parte superior do seu projeto de teste por Sdk="MSTest.Sdk"
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"
Adicione a versão ao seu global.json
:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.6.3"
}
}
Você pode então começar a simplificar seu projeto.
Remova as propriedades padrão:
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>
Remova 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 Microsoft.Testing.Extensions.*
pacotes.
Atualize o seu CI
Depois de atualizar seus projetos, se você estiver usando MSTest runner
(padrão) e se depender dotnet test
para executar seus testes, deverá atualizar 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.
Aqui está um exemplo de atualização ao usar a DotNetCoreCLI
tarefa 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"'