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.

Importante

A execução de projetos MTP no modo VSTest é considerada herdada em favor da experiência mais recente no SDK do .NET 10. O suporte à execução nesse modo será removido em Microsoft.Testing.Platform versão 2. Para obter mais informações, consulte Migrar para o modo MTP de dotnet test.

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"

Importante

A experiência dotnet test para MTP só tem suporte no Microsoft.Testing.Platform versão 1.7 e posterior.

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>

Migrar para o modo MTP de dotnet test

Para os usuários de MTP que estão usando o modo VSTest de dotnet test, há poucas ações necessárias para migrar para a experiência mais recente de dotnet test.

  1. Adicione dotnet.config a raiz do repositório, conforme mostrado acima.
  2. Remova TestingPlatformDotnetTestSupport a propriedade MSBuild, pois ela não é mais necessária.
  3. Remova TestingPlatformCaptureOutput e TestingPlatformShowTestsFailure as propriedades do MSBuild, pois elas não são mais usadas pelo novo dotnet test.
  4. Remova o extra --, por exemplo dotnet test -- --report-trx , deve se tornar dotnet test --report-trx.
  5. Se passar uma solução específica (ou diretório que contém a solução), por exemplo, dotnet test MySolution.slnisso deverá se tornar dotnet test --solution MySolution.sln.
  6. Se passar um projeto específico (ou diretório que contém o projeto), por exemplo, dotnet test MyProject.csprojisso deverá se tornar dotnet test --project MyProject.csproj.
  7. Se passar uma dll específica, por exemplo, dotnet test path/to/UnitTests.dllisso deverá se tornar dotnet test --test-modules path/to/UnitTests.dll. Observe que --test-modules também dá suporte à globbing.