Compartilhar via


Testar com o "teste dotnet"

Este artigo fornece insights sobre o comando dotnet test CLI, incluindo sua compatibilidade histórica com o VSTest e o Microsoft.Testing.Platform (MTP).

O dotnet test comando opera em dois modos primários:

  • Modo VSTest: esse é o modo padrão para dotnet test e era o único modo disponível antes do SDK do .NET 10. Ele foi projetado principalmente para o VSTest, mas também pode executar o teste Microsoft.Testing.Platform por meio do pacote NuGet Microsoft.Testing.Platform.MSBuild .
  • Modo Microsoft.Testing.Platform : introduzido com o SDK do .NET 10, esse modo dá suporte exclusivamente a aplicativos de teste criados com Microsoft.Testing.Platform.

Dica

Para referência da CLI, consulte dotnet test.

Modo VSTest de dotnet test

Por muito tempo, o VSTest foi a única plataforma de teste no .NET. Consequentemente, dotnet test foi projetado exclusivamente para VSTest, com todas as opções de linha de comando adaptadas ao VSTest.

O processo envolve invocar o alvo VSTest do MSBuild, que aciona outros alvos internos para serem executados e, por fim, executa o vstest.console. Todas as dotnet test opções de linha de comando são traduzidas para seus equivalentes no vstest.console.

Executar projetos MTP com o modo VSTest

dotnet test foi projetado para executar projetos VSTest no modo VSTest. No entanto, você pode executar projetos MTP no dotnet test modo VSTest usando o pacote Microsoft.Testing.Platform.MSBuild . Do ponto de vista do usuário, esse suporte é habilitado definindo a TestingPlatformDotnetTestSupport propriedade true MSBuild como (por false padrão, por motivos de compatibilidade com versões anteriores). Quando essa propriedade é definida como true, Microsoft.Testing.Platform.MSBuild altera o comportamento de destino, redirecionando-o VSTest para chamar InvokeTestingPlatform. InvokeTestingPlatform é um destino msbuild incluído em Microsoft.Testing.Platform.MSBuild que é responsável por executar corretamente aplicativos de teste MTP como executáveis. As opções de linha de comando específicas do VSTest, como --logger, são silenciosamente ignoradas nesse modo. Para incluir argumentos específicos do MTP, como --report-trx, você deve anexá-los depois de um -- adicional. Por exemplo, dotnet test -- --report-trx.

Observação

MSTest e NUnit usam o pacote Microsoft.Testing.Extensions.VSTestBridge . Ao definir EnableMSTestRunner ou EnableNUnitRunner (que habilita o Microsoft.Testing.Platform), seu projeto de teste dará suporte ao VSTest e ao Microsoft.Testing.Platform. Nesse cenário, se você usar o modo VSTest de dotnet test e não definir TestingPlatformDotnetTestSupport como true, você estará essencialmente executando inteiramente com o VSTest, como se EnableMSTestRunner e EnableNUnitRunner não estivesse definido como true.

Observação

É altamente recomendável definir a TestingPlatformDotnetTestSupport propriedade em Directory.Build.props. Isso garante que você não precise adicioná-lo a cada arquivo de projeto de teste individualmente. Além disso, ele impede o risco de introduzir um novo projeto de teste que não define essa propriedade, o que pode resultar em uma solução em que alguns projetos usam o VSTest enquanto outros usam Microsoft.Testing.Platform. Essa configuração mista pode não funcionar corretamente e é um cenário sem suporte.

A lista a seguir descreve as opções de linha de comando do dotnet test comando no modo VSTest compatíveis com Microsoft.Testing.Platform. Essas opções são específicas para o processo de build e não são passadas para o VSTest, razão pela qual funcionam com MTP.

  • -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>

Dica

Você pode personalizar os argumentos de linha de comando do aplicativo de teste por meio TestingPlatformCommandLineArguments da propriedade MSBuild:

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

Para obter mais informações específicas sobre a execução de projetos MTP no modo VSTest de dotnet test, consulte Usar Microsoft.Testing.Platform com o modo VSTest de dotnet test.

Detalhes técnicos avançados

No dotnet test modo VSTest, o -- é usado para indicar os argumentos RunSettings. Originalmente, dotnet test foi projetado para passar esses argumentos como uma propriedade MSBuild chamada VSTestCLIRunSettings. Portanto, ao executar aplicativos de teste MTP no modo VSTest, redefinimos o valor para VSTestCLIRunSettings representar os "argumentos do aplicativo".

Combinando VSTest e Microsoft.Testing.Platform (MTP)

Ao executar dotnet test no modo VSTest, é recomendável evitar incluir o VSTest e o Microsoft.Testing.Platform na mesma solução.

Esse cenário não tem suporte oficial e você deve estar ciente do seguinte:

  • As opções de linha de comando específicas do VSTest só se aplicarão a projetos VSTest e não a aplicativos de teste MTP.
  • As opções de linha de comando específicas do MTP fornecidas depois -- serão tratadas como argumentos RunSettings para projetos VSTest.

Principais conclusões

  • Para executar aplicativos de teste MTP no dotnet test modo VSTest, você deve usar Microsoft.Testing.Platform.MSBuild, passar as opções de linha de comando específicas do MTP após o extra --e definir TestingPlatformDotnetTestSupport como true.
  • As opções de linha de comando orientadas ao VSTest são ignoradas silenciosamente.

Devido a esses problemas, o .NET introduziu um novo dotnet test modo especificamente projetado para MTP. Incentivamos os usuários MTP a fazer a transição do modo VSTest dotnet test para o novo modo com o SDK do .NET 10.

Modo Microsoft.Testing.Platform (MTP) de dotnet test

Para resolver os problemas encontrados durante a execução dotnet test com MTP no modo VSTest, o .NET introduziu um novo modo no SDK do .NET 10 projetado especificamente para MTP.

Para habilitar esse modo, adicione um dotnet.config arquivo à raiz do repositório ou da solução.

[dotnet.test:runner]
name = "Microsoft.Testing.Platform"

Observação

O formato será alterado de dotnet.test:runner para dotnet.test.runner no SDK do .NET 10 Preview 4.

Como esse modo foi projetado especificamente para Microsoft.Testing.Platform, não são necessários nem TestingPlatformDotnetTestSupport nem o adicional --.

Importante

Esse modo só é compatível com Microsoft.Testing.Platform versão 1.7.0 e posterior.

Importante

Se o projeto de teste der suporte ao VSTest, mas não der suporte ao MTP, um erro será gerado.

Dica

Você pode personalizar os argumentos de linha de comando do aplicativo de teste por meio TestingPlatformCommandLineArguments da propriedade MSBuild:

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>