Comparação entre Microsoft.Testing.Platform e VSTest
Microsoft.Testing.Platform
é uma alternativa leve e portátil ao VSTest para executar testes em linha de comando, em pipelines de integração contínua (CI), no Gerenciador de Testes do Visual Studio e no Visual Studio Code. Neste artigo, você aprenderá as principais diferenças entre o corredor MSTest e o VSTest.
Diferenças na execução do teste
Os testes são executados de maneiras diferentes, dependendo do corredor.
Executar testes VSTest
O VSTest é fornecido com o Visual Studio, o SDK do .NET e como uma ferramenta autônoma no pacote Microsoft.TestPlatform NuGet. VSTest usa um executável runner para executar testes, chamado vstest.console.exe
, que pode ser usado diretamente ou através dotnet test
.
Executar testes Microsoft.Testing.Platform
Microsoft.Testing.Platform é incorporado diretamente em seu projeto de teste e não envia nenhum executável extra. Quando você executa o executável do projeto, os testes são executados. Para obter mais informações sobre como executar testes Microsoft.Testing.Platform, consulte Visão geral de Microsoft.Testing.Platform: Executar e depurar testes.
Namespaces e pacotes NuGet
Para se familiarizar com Microsoft.Testing.Platform
e VSTest, é útil entender os namespaces e pacotes NuGet usados por cada um.
Namespaces VSTest
VSTest é uma coleção de ferramentas de teste que também são conhecidas como a plataforma de teste . O código-fonte VSTest é de código aberto e está disponível no repositório microsoft/vstest GitHub. O código usa o namespace Microsoft.TestPlatform.*
.
O VSTest é extensível e tipos comuns são colocados em pacote Microsoft.TestPlatform.ObjectModel NuGet.
Namespaces Microsoft.Testing.Platform
A Microsoft.Testing.Platform baseia-se no pacote NuGet Microsoft.Testing.Platform e noutras bibliotecas no espaço de nomes Microsoft.Testing.*
. Como o VSTest, o Microsoft.Testing.Platform
é de código aberto e tem um repositório microsoft/testfx GitHub.
Protocolo de comunicação
Observação
O Visual Studio Test Explorer suporta o protocolo Microsoft.Testing.Platform desde 17.12 em diante. Se você executar/depurar seus testes usando versões anteriores do Visual Studio, o Test Explorer usará vstest.console.exe
e o protocolo antigo para executar esses testes.
Microsoft.Testing.Platform usa um protocolo baseado em JSON-RPC para se comunicar entre o Visual Studio e o processo do executor de teste. O protocolo está documentado no repositório MSTest GitHub.
O VSTest também usa um protocolo de comunicação baseado em JSON, mas não é baseado em JSON-RPC.
Desativando o novo protocolo
Para desabilitar o uso do novo protocolo no Test Explorer, você pode editar seu projeto para adicionar a seguinte propriedade: <DisableTestingPlatformServerCapability>true</DisableTestingPlatformServerCapability>
.
Você também pode ir para as opções de recursos de visualização no Visual Studio e desmarcar a opção "Usar o modo de servidor de plataforma de teste".
Executáveis
O VSTest distribui vários executáveis, incluindo vstest.console.exe
, testhost.exe
e datacollector.exe
. No entanto, o MSTest é incorporado diretamente em seu projeto de teste e não envia nenhum outro executável. O executável para o qual seu projeto de teste compila é usado para hospedar todas as ferramentas de teste e executar todas as tarefas necessárias para executar testes.
Migrando do VSTest
Além das etapas específicas para sua estrutura de teste, você precisa atualizar sua infraestrutura de teste para acomodar a Microsoft.Testing.Platform
.
dotnet test
As opções de linha de comando do dotnet test
são divididas em 2 categorias: construir argumentos relacionados e testar os relacionados.
Os argumentos relacionados à compilação são passados para o comando dotnet build
e, como tal, não precisam ser atualizados para a nova plataforma. Os argumentos relacionados à construção estão listados abaixo:
-a|--arch <ARCHITECTURE>
--artifacts-path <ARTIFACTS_DIR>
-c|--configuration <CONFIGURATION>
-f|--framework <FRAMEWORK>
-e|--environment <NAME="VALUE">
--interactive
--no-build
--nologo
--no-restore
-o|--output <OUTPUT_DIRECTORY>
--os <OS>
-r|--runtime <RUNTIME_IDENTIFIER>
-v|--verbosity <LEVEL>
Os argumentos relacionados ao teste são específicos do VSTest e, portanto, precisam ser transformados para corresponder à nova plataforma. A tabela a seguir mostra o mapeamento entre os argumentos VSTest e a nova plataforma:
Argumento VSTest | Novo argumento de plataforma |
---|---|
--test-adapter-path <ADAPTER_PATH> |
Não suportado |
--blame |
Não suportado |
--blame-crash |
--crashdump requer a extensão de registo de falhas |
--blame-crash-dump-type <DUMP_TYPE> |
--crashdump-type requer a extensão de despejo de memória |
--blame-crash-collect-always |
Não suportado |
--blame-hang |
--hangdump requer extensão Hang dump |
--blame-hang-dump-type <DUMP_TYPE> |
--hangdump-type requer extensão Hang dump |
--blame-hang-timeout <TIMESPAN> |
--hangdump-timeout requer extensão Hang dump |
--collect <DATA_COLLECTOR_NAME> |
Depende do coletor de dados |
-d\|--diag <LOG_FILE> |
--diagnostic |
--filter <EXPRESSION> |
Depende da estrutura de teste selecionada |
-l\|--logger <LOGGER> |
Depende do registador |
--results-directory <RESULTS_DIR> |
--results-directory <RESULTS_DIR> |
-s\|--settings <SETTINGS_FILE> |
Depende da estrutura de teste selecionada |
-t\|--list-tests |
--list-tests |
-- <RunSettings arguments> |
Não suportado |
Importante
Antes de especificar quaisquer argumentos Microsoft.Testing.Platform
, é necessário adicionar --
para separar os argumentos dotnet test
dos novos argumentos da plataforma. Por exemplo, dotnet test --no-build -- --list-tests
.
vstest.console.exe
Se você estiver usando vstest.console.exe
diretamente, recomendamos substituí-lo pelo comando dotnet test
.
Explorador de Testes
Ao usar o Visual Studio ou Visual Studio Code Test Explorer, talvez seja necessário habilitar o suporte para a nova plataforma de teste.
Estúdio Visual
Visual Studio Test Explorer suporta a nova plataforma de teste a partir da versão 17.14. Se você estiver usando uma versão anterior, talvez seja necessário atualizar seu Visual Studio para a versão mais recente.
Código do Visual Studio
Visual Studio Code Test Explorer suporta a nova plataforma de teste a partir da versão X.
Azure DevOps
Ao usar tarefas do Azure DevOps, talvez seja necessário atualizar seu pipeline para usar a nova plataforma de teste.
Tarefa VSTest
Se você estiver usando o de tarefas VSTest no Azure DevOps, poderá substituí-lo pelo de tarefas.NET Core.
Tarefa .NET Core
Se você estiver usando a tarefa .NET Core, nenhuma alteração será necessária.