Partilhar via


Testar com 'dotnet test'

Este artigo fornece perspetivas sobre o comando CLI dotnet test, incluindo o seu histórico de compatibilidade com VSTest e Microsoft.Testing.Platform (MTP).

O dotnet test comando opera em dois modos principais:

  • Modo VSTest : Este é o modo padrão e dotnet test era o único modo disponível antes do SDK do .NET 10. Ele foi projetado principalmente para 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 suporta exclusivamente aplicativos de teste criados com Microsoft.Testing.Platform.

Sugestão

Para referência da CLI, consulte dotnet test.

Modo de VSTest de dotnet test

Durante 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 VSTest destino MSBuild, que aciona outros destinos internos para executar e, finalmente, executa vstest.console. Todas as dotnet test opções de linha de comando são convertidas para seus equivalentes em 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 . Da perspetiva do usuário, esse suporte é habilitado definindo a TestingPlatformDotnetTestSupport propriedade MSBuild como true (é por padrão por motivos de false compatibilidade com versões anteriores). Quando essa propriedade é definida como true, Microsoft.Testing.Platform.MSBuild altera o comportamento de VSTest destino, redirecionando-o 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. 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, deve anexá-los após um --. 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 Microsoft.Testing.Platform), seu projeto de teste suportará VSTest e Microsoft.Testing.Platform. Nesse cenário, se você usar o modo VSTest de dotnet test e não definir TestingPlatformDotnetTestSupport como true, você está essencialmente executando inteiramente com VSTest, como se EnableMSTestRunner e EnableNUnitRunner não estão definidos 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 evita 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 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 comando dotnet test no modo VSTest que são suportadas pelo Microsoft.Testing.Platform. Essas opções são específicas para o processo de compilação e não transmitidas para o VSTest, e é por isso que eles trabalham 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>

Sugestão

Você pode personalizar os argumentos de linha de comando do seu aplicativo de teste via TestingPlatformCommandLineArguments propriedade MSBuild:

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

Para mais informações específicas sobre a execução de projetos MTP no modo VSTest de dotnet test, consulte Use o 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 aplicações de teste MTP no modo VSTest, redefinimos o valor de VSTestCLIRunSettings para representar os "argumentos da aplicação".

Misturando VSTest e Microsoft.Testing.Platform (MTP)

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

Este cenário não é oficialmente suportado, 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 de -- 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 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 silenciosamente ignoradas.

Devido a esses problemas, o .NET introduziu um novo dotnet test modo projetado especificamente 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.

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

Para resolver os problemas encontrados ao executar dotnet test com MTP no modo VSTest, o .NET introduziu um novo modo no SDK do .NET 10 que foi projetado especificamente para MTP.

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

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

Importante

A dotnet test experiência para MTP só é suportada na Microsoft.Testing.Platform versão 1.7 e posterior.

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

Importante

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

Importante

Se o seu projeto de teste suporta VSTest mas não suporta MTP, um erro será gerado.

Sugestão

Você pode personalizar os argumentos de linha de comando do seu aplicativo de teste via TestingPlatformCommandLineArguments propriedade MSBuild:

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