Comparação entre Microsoft.Testing.Platform e VSTest
Microsoft.Testing.Platform
é uma alternativa leve e portátil ao VSTest para executar testes na 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 executor MSTest e o VSTest.
Diferenças na execução do teste
Os testes são executados de maneiras diferentes, dependendo do executor.
Executar testes com o VSTest
O VSTest é fornecido com o Visual Studio, o SDK do .NET e como uma ferramenta autônoma no pacote NuGet Microsoft.Testing.Platform. O VSTest usa um executável do executor para executar testes, chamado vstest.console.exe
, que pode ser usado diretamente ou por meio de dotnet test
.
Executar testes do Microsoft.Testing.Platform
O Microsoft.Testing.Platform é inserido diretamente em seu projeto de teste e não envia nenhum executável extra. Quando você executa o executável do projeto, seus testes são executados. Para obter mais informações sobre como executar testes da Microsoft.Testing.Platform, confira Visão geral da Microsoft.Testing.Platform: executar e depurar testes.
Namespaces e pacotes NuGet
Para se familiarizar com o Microsoft.Testing.Platform
e o VSTest, é útil entender os namespaces e os pacotes NuGet usados por cada um.
Namespaces do VSTest
O VSTest é uma coleção de ferramentas de teste, que também são conhecidas como Plataforma de Teste. O código-fonte do VSTest é de código aberto e está disponível no repositório GitHub microsoft/vstest. O código usa o namespace Microsoft.TestPlatform.*
.
O VSTest é extensível e tipos comuns são colocados no pacote NuGet Microsoft.TestPlatform.ObjectModel.
Namespaces do Microsoft.Testing.Platform
A Microsoft.Testing.Platform baseia-se no pacote NuGet Microsoft.Testing.Platform e em outras bibliotecas no namespace Microsoft.Testing.*
. Como o VSTest, o Microsoft.Testing.Platform
é de código aberto e tem um repositório GitHub microsoft/testfx.
Protocolo de comunicação (versão prévia)
Observação
O Gerenciador de Testes do Visual Studio dá suporte ao protocolo Microsoft.Testing.Platform nas versões prévias de 17.10 em diante. Se você executar/depurar seus testes usando versões anteriores do Visual Studio, o Gerenciador de Testes usará vstest.console.exe
e o protocolo antigo para executar esses testes.
O Microsoft.Testing.Platform usa um protocolo baseado em JSON-RPC para se comunicar entre o Visual Studio e o processo de executor de teste. O protocolo está documentado no repositório do GitHub do MSTest.
O VSTest também usa um protocolo de comunicação baseado em JSON, mas não é baseado em JSON-RPC.
Desabilitando o novo protocolo
Para desabilitar o uso do novo protocolo no Gerenciador de Testes, você pode editar seu projeto para adicionar a seguinte propriedade: <DisableTestingPlatformServerCapability>true</DisableTestingPlatformServerCapability>
.
Executáveis
O VSTest envia vários executáveis, notadamente 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 é compilado é usado para hospedar todas as ferramentas de teste e realizar todas as tarefas necessárias para executar os testes.
Migração do VSTest
Além das etapas específicas para a estrutura de teste, é necessário atualizá-la para acomodar o Microsoft.Testing.Platform
.
dotnet test
As opções de linha de comando de dotnet test
são divididas em duas categorias: criar argumentos relacionados e testar os relacionados.
Os argumentos relacionados à compilação são transmitidos para o comando dotnet build
e, portanto, não precisam ser atualizados para a nova plataforma. Os argumentos relacionados à compilaçã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> |
Sem suporte |
--blame |
Sem suporte |
--blame-crash |
--crashdump requer extensão de despejo para falhas |
--blame-crash-dump-type <DUMP_TYPE> |
--crashdump-type requer extensão de despejo para falhas |
--blame-crash-collect-always |
Sem suporte |
--blame-hang |
--hangdump requer a extensão de despejo de travamento |
--blame-hang-dump-type <DUMP_TYPE> |
--hangdump-type requer a extensão de despejo de travamento |
--blame-hang-timeout <TIMESPAN> |
--hangdump-timeout requer a extensão de despejo de travamento |
--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 registrador |
--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> |
Sem suporte |
Importante
Antes de especificar argumentos Microsoft.Testing.Platform
, você precisa 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
.
Gerenciador de Testes
Ao usar o Visual Studio ou o Visual Studio Code Test Explorer, talvez seja necessário habilitar o suporte para a nova plataforma de teste.
Visual Studio
O Gerenciador de Testes do Visual Studio oferece suporte à nova plataforma de teste a partir da versão 17.14. Se você estiver usando uma versão anterior, talvez seja necessário atualizar o Visual Studio para a versão mais recente.
Visual Studio Code
O Gerenciador de Testes do Visual Studio Code oferece suporte à nova plataforma de teste a partir da versão X.
Azure DevOps
Ao usar tarefas do Azure DevOps, talvez seja necessário atualizar o pipeline para usar a nova plataforma de teste.
Tarefa VSTest
Se você estiver usando a tarefa VSTest no Azure DevOps, poderá substituí-la pela tarefa .NET Core.
Tarefa do .NET Core
Se você estiver usando a tarefa .NET Core, nenhuma alteração será necessária.