Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo aborda opções avançadas de configuração para MSTest.Sdk. Para configuração básica e introdução, veja Introdução ao MSTest.
Importante
Por defeito, o MSTest.Sdk usa o runner MSTest com MTP, incluindo dotnet test. Isto requer modificar o seu CI e as chamadas CLI locais, e também afeta as entradas disponíveis nos ficheiros .runsettings. Podes manter as integrações e ferramentas antigas mudando para VSTest.
MSTest.Sdk define EnableMSTestRunner e TestingPlatformDotnetTestSupport para true por defeito. Para mais informações sobre o teste dotnet e os seus diferentes modos, veja Testing with dotnet test.
Bibliotecas auxiliares do utilitário de teste
Se o project que usa o MSTest.Sdk for concebido para ser uma biblioteca auxiliar de utilidade de teste, e por si só não contém testes executáveis, o project deve ter <IsTestApplication>false</IsTestApplication>.
Selecione o corredor
Por defeito, o MSTest SDK depende do MTP, mas podes mudar para VSTest adicionando a propriedade <UseVSTest>true</UseVSTest>.
Testar modelos de aplicações Windows
A partir do MSTest.Sdk 4.5, o runner MTP padrão suporta os seguintes modelos de aplicações Windows:
- Projetos clássicos UWP que têm como alvo
uap10.0. - Projetos UWP modernos que utilizam .NET 10 e definem
UseUwpcomotrue. - Projetos WinUI 3 empacotados e de confiança total.
- Projetos WinUI 3 não empacotados.
- Projetos do WinUI 3
packagedClassicAppque definemTrustLevel="appContainer".
O MSTest.Sdk fornece componentes MTP 2.5 compatíveis e inicia um sidecar de modelo de aplicação de confiança total para hosts de teste empacotados e AppContainer. O sidecar regista o pacote, ativa a aplicação selecionada pelo AUMID, autoriza o SID exato do pacote para comunicação AppContainer e recupera artefactos resultantes do armazenamento do pacote.
Os projetos UWP continuam a exigir o workload do UWP do Visual Studio e o MSBuild para ambiente de trabalho para suporte durante a compilação. Eles não exigem Microsoft.NET.Test.Sdk, vstest.console, nem o fornecedor de runtime de teste Visual Studio UWP.
Para configuração de projetos, comandos de execução e exemplos, consulte Testar aplicações UWP e WinUI 3 com MSTest e MTP.
A partir da pré-visualização do MSTest.Sdk 4.5, defina EnableWindowsUIAutomation como true para adicionar o pacote MSTest.Windows.UIAutomation correspondente a um projeto direcionado ao Windows. Esta funcionalidade lança e automatiza uma aplicação externa não empacotada no Win32, Windows Forms ou WPF, em vez de alojar testes dentro de uma aplicação UWP ou WinUI. Para mais detalhes, consulte Testar aplicações de ambiente de trabalho Windows com MSTest Automatização da Interface de Utilizador.
Estender o MTP
Pode personalizar a experiência MTP através de um conjunto de extensões de pacotes NuGet. Para simplificar e melhorar essa experiência, o MSTest SDK apresenta dois recursos:
A partir do MSTest 4.4, o adaptador MSTest utiliza a sua integração nativa MTP e já não depende de Microsoft.Testing.Extensions.VSTestBridge. Fazer referência explícita à ponte apenas quando a aplicação de teste MTP tiver de executar uma estrutura através do adaptador VSTest respetivo.
Perfil Microsoft.Testing.Platform
O conceito de
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:
- Cobertura de código
- Relatório Trx
- Azure DevOps Report (MSTest.Sdk 4.3.0+)
- GitHub Actions Report (MSTest.Sdk 4.3.0+; o pacote foi pré-lançado na 4.3.x e segue a versão MTP a partir da 4.4)
AllMicrosoft- Permite as extensões da Microsoft selecionadas para uma utilização alargada e imediata, incluindo extensões com uma licença restritiva. As extensões experimentais e exclusivas da API podem ainda exigir adesão explícita.Permite todas as extensões do
Defaultperfil, mais as seguintes extensões:- Despejo de Erro
- Fakes (MSTest.Sdk 3.7.0+)
- Depósito de Hang
- Hot Reload
- Relatório HTML
- Repetir
No MSTest.Sdk versões 3.11.0 a 4.2.x, a extensão Azure DevOps Report está incluída apenas em
AllMicrosoft.
Nota
Os perfis referenciam os pacotes Azure DevOps Report e GitHub Actions Report, mas os relatórios permanecem desativados em tempo de execução. Passe --report-azdo para ativar os relatórios do Azure DevOps. Para ativar o GitHub Actions Reporting, execute os testes no GitHub Actions e passe --report-gh.
Aqui está um exemplo completo, usando o perfil None.
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
</Project>
| Extensão/Perfil | Nenhum | Padrão | AllMicrosoft |
|---|---|---|---|
| Cobertura de código | ✔️ | ✔️ | |
| Despejo de Erro | ✔️ | ||
| Falsificações | ✔️¹ | ||
| Depósito de Hang | ✔️ | ||
| Hot Reload | ✔️ | ||
| Relatório HTML | ✔️ | ||
| Relatório GitHub Actions | ✔️³ | ✔️³ | |
| Repetir | ✔️ | ||
| Trx | ✔️ | ✔️ | |
| Azure DevOps Report | ✔️³ | ✔️² |
¹ MSTest.Sdk 3.7.0+ ² MSTest.Sdk 3.11.0+ ³ MSTest.Sdk 4.3.0+
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 ativar a extensão de crash dump (pacote NuGet Microsoft. Testing.Extensions.CrashDump), pode usar a seguinte propriedade EnableMicrosoftTestingExtensionsCrashDump definida para true:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
</Project>
Para uma lista de todas as extensões disponíveis, veja as funcionalidades do MTP.
Algumas extensões MTP continuam a ser opcionais e não estão incluídas nos perfis Default ou AllMicrosoft:
- Começando com MSTest.Sdk 4.3, define
<EnableMicrosoftTestingExtensionsJUnitReport>true</EnableMicrosoftTestingExtensionsJUnitReport>, depois passa--report-junit. - Começando com MSTest.Sdk 4.4, defino
<EnableMicrosoftTestingExtensionsCtrfReport>true</EnableMicrosoftTestingExtensionsCtrfReport>, depois passa--report-ctrf. - Para referenciar a extensão OpenTelemetry, defina
<EnableMicrosoftTestingExtensionsOpenTelemetry>true</EnableMicrosoftTestingExtensionsOpenTelemetry>. Como a extensão requer configuração da API, regista-a no seu ponto de entrada personalizado conforme descrito no OpenTelemetry.
Estas extensões estão disponíveis apenas com MTP.
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/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
</Project>
No MSTest.Sdk 4.3.0 e posteriores, o Default perfil faz referência aos pacotes Azure DevOps Report e GitHub Actions Report. Para remover qualquer referência de pacote, defina <EnableMicrosoftTestingExtensionsAzureDevOpsReport>false</EnableMicrosoftTestingExtensionsAzureDevOpsReport> ou <EnableMicrosoftTestingExtensionsGitHubActionsReport>false</EnableMicrosoftTestingExtensionsGitHubActionsReport>. Se mantiveres as referências de pacotes, os relatórios do Azure DevOps só começam quando passares --report-azdo. A criação de relatórios do GitHub Actions só começa quando executas os testes no GitHub Actions e passas --report-gh.
Funcionalidades
Para além da seleção do runner e das extensões específicas para runner, MSTest.Sdk também fornece recursos adicionais para simplificar e melhorar a sua experiência de teste.
Teste com Aspire
Aspire é uma stack opinativa e pronta para a cloud para construir aplicações distribuídas observáveis, prontas para produção. Aspire é entregue através de uma coleção de pacotes NuGet que lidam com questões específicas nativas da nuvem. Para mais informações, consulte a Aspire documentação.
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/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableAspireTesting>true</EnableAspireTesting>
</PropertyGroup>
</Project>
Teste com Dramaturgo
Playwright permite testes fiáveis de ponta a ponta para web apps modernas. 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/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnablePlaywright>true</EnablePlaywright>
</PropertyGroup>
</Project>
Migrar para o SDK do MSTest
Considere as etapas a seguir necessárias para migrar para o SDK do MSTest.
Atualize o seu projecto
Ao migrar um projeto de teste MSTest existente para o MSTest SDK, comece por substituir a entrada Sdk="Microsoft.NET.Sdk" no topo 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": "4.1.0"
}
}
Depois podes começar a simplificar o teu projecto.
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 está a usar, também pode remover alguns dos pacotes Microsoft.Testing.Extensions.*.
Atualize o seu CI
Depois de atualizar os seus projetos, se estiver usando MTP (por defeito) e se depender de dotnet test para executar os seus testes, é necessário atualizar a configuração do CI. Para obter mais informações e orientar a sua compreensão de todas as alterações necessárias, consulte dotnet test integration.
Se estiveres a usar o modo VSTest de dotnet test, aqui está um exemplo de atualização ao usar a tarefa DotNetCoreCLI em Azure DevOps:
O perfil de extensões predefinido do MSTest.Sdk fornece os pacotes Microsoft.Testing.Extensions.TrxReport e Microsoft.Testing.Extensions.CodeCoverage necessários para as opções adicionadas. Se selecionares o perfil None, ativa ou consulta ambas as extensões antes de usares as opções.
\- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/**.sln'
- arguments: '--configuration Release'
+ arguments: '--configuration Release -- --report-trx --results-directory $(Agent.TempDirectory) --coverage'
Gerador de fonte de reflexão
O MSTest 4.3 introduziu o gerador de fonte de reflexão no pacote experimental MSTest.SourceGeneration de versão independente. A partir do MSTest 4.4, o pacote passa do estado experimental e utiliza a versão MSTest.
Os projetos nativos AOT incluem automaticamente o gerador de código-fonte. Para um projeto sem NativeAOT que utiliza MSTest.Sdk, ative-o com <EnableMSTestSourceGeneration>true</EnableMSTestSourceGeneration>. MSTest.Sdk alinha as versões MSTest.SourceGeneration, MSTest.TestFramework e MSTest.TestAdapter por meio de MSTestVersion.
O SDK também suporta a geração de código-fonte em bibliotecas de teste reutilizáveis e projetos que utilizam a Gestão Central de Pacotes. Fornece ganchos de execução correspondentes MSTest.TestAdapter e gera os itens necessários PackageVersion .
O .NET Standard não suporta estes ganchos de runtime. Quando ativa a geração de origem para um alvo .NET Standard, o SDK reporta este erro:
A geração de fonte MSTest não é suportada para frameworks de alvo .NET Standard porque os ganchos de runtime do MSTest.TestAdapter necessários não estão disponíveis.
O gerador de código-fonte descobre testes em tempo de compilação. Quando o gerador está ativo, as classes de teste devem declarar [TestClass] diretamente em vez de o herdar. O analisador MSTEST0069 sinaliza classes que dependem de um [TestClass] herdado.
A partir do MSTest 4.3.2, MSTestSourceGenMode tem como predefinição ReflectionFree nos projetos com trimming e Native AOT. Este modo utiliza metadados gerados e invocadores nos casos em que suporta a estrutura do teste. Em runtimes que suportam reflexão, o MSTest recorre à reflexão para entradas geradas não suportadas ou em falta.
A partir do MSTest 4.4, a geração sem reflexão materializa metadados completos de atributos herdados, incluindo AttributeUsage e AllowMultiple. Em MTP, pode ignorar a deteção e validação em tempo de execução para métodos síncronos simples [TestMethod] e [DataRow]. Testes assíncronos, atributos de métodos de teste personalizados, DynamicDataimplementações personalizadas ITestDataSource e formas de teste ambíguas usam o caminho de recurso. O VSTest também mantém o seu percurso existente.
O modo sem reflexão reporta estes diagnósticos:
| ID | Formato de teste não suportado |
|---|---|
AOTSG0001 |
Classe de teste estático |
AOTSG0002 |
Classe de teste genérica aberta, incluindo uma classe aninhada num tipo genérico |
AOTSG0003 |
Classe à qual o código gerado não pode aceder, incluindo uma classe local ao ficheiro ou um aninhamento privado ou privado protegido |
AOTSG0004 |
Método genérico de teste |
AOTSG0005 |
Método de teste com um ref, in, ou out parâmetro |
Características experimentais
As seguintes funcionalidades do MSTest 4.3 são experimentais. As suas APIs públicas estão sujeitas a alterações e são disponibilizadas através de funcionalidades de diagnóstico experimental. Para aderir, confirme o identificador de diagnóstico correspondente.
Filtragem programática de testes com ITestFilter
Nota
Introduzido no MSTest 4.3.0 (experimental).
O ponto de extensão experimental ITestFilter , registado através de [TestFilterProviderAttribute], permite-lhe decidir programaticamente se cada teste é executado, antes de qualquer classe de teste ser carregada. Isto é útil para lógica de seleção personalizada que não pode ser expressa com filtros de linha de comandos.
Implemente ITestFilter.Filter(TestFilterContext) para inspecionar metadados sem carregar a classe de teste:
public sealed class MyFilter : ITestFilter
{
public TestFilterResult Filter(TestFilterContext context) =>
context.DisplayName.Contains("Nightly", StringComparison.Ordinal)
? TestFilterResult.Run : TestFilterResult.Drop;
}
Prima TestFilterResult.Run para executar o teste, Drop para omiti-lo sem apresentar um resultado ou Skip(reason) para assinalar um resultado como ignorado. O MSTest pode chamar uma instância de filtro em simultâneo, pelo que as implementações devem ser seguras para threads. Os filtros da linha de comandos e do Explorador de Testes executam-se antes de ITestFilter, enquanto [Ignore] é avaliado posteriormente.
A partir do MSTest 4.4, os projetos .NET podem usar o formulário [assembly: TestFilterProvider<MyFilter>]genérico e seguro para tipos de registo. O compilador impõe então que MyFilter implementa ITestFilter e tem um construtor público sem parâmetros. O atributo genérico não está disponível para o .NET Framework. Para um projeto multi-direcionado, selecione a forma genérica ou não genérica com um símbolo de pré-processador do framework de destino.
#if NET
[assembly: TestFilterProvider<MyFilter>]
#else
[assembly: TestFilterProvider(typeof(MyFilter))]
#endif
A partir da versão 4.4 do MSTest, o analisador MSTEST0081 valida integralmente a forma de registo não genérica. Para o formulário genérico, continua a reportar tipos de filtro genéricos e assemblies que registam mais do que um fornecedor.
TestRun.Current e testes planeados
Nota
Introduzido no MSTest 4.3.0 (experimental).
A API experimental TestRun.Current (do RFC 014) expõe informações sobre a execução atual, incluindo o conjunto de testes planeados, para que extensões e fixtures possam inspecionar o que está programado para ser executado.
Limitações conhecidas
Os SDKs MSBuild fornecidos pelo NuGet (incluindo o MSTest.Sdk) têm limitado suporte a ferramentas no que toca à atualização da sua versão, o que significa que a atualização habitual do NuGet e a interface Visual Studio para gerir pacotes NuGet não funcionam como esperado. Terás de atualizar manualmente a versão no ficheiro global.json e no ficheiro project. (Isto aplica-se mesmo que uses o Dependabot devido a problemas dependabot-core#12824 e dependabot-core#8615.)