Partilhar via


Testar com 'dotnet test'

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

O dotnet test comando opera em dois modos principais:

  • Modo VSTest: Este é o modo padrão para dotnet test e era o único disponível antes do SDK .NET 10. Foi concebido principalmente para o VSTest, mas também pode executar o Microsoft.Testing.Platform através do pacote NuGet Microsoft.Testing.Platform.MSBuild.
  • Microsoft.Testing.Platform mode: Introduzido com o SDK .NET 10, este modo é exclusivo para aplicações de teste construídas 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 testes em .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, pode correr projetos MTP em modo VSTest dotnet test usando o Microsoft. Testing.Platform.MSBuild package. 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 esta propriedade é definida para true, Microsoft.Testing.Platform.MSBuild altera o comportamento alvo VSTest, redirecionando-o para chamar InvokeTestingPlatform. InvokeTestingPlatform é um alvo MSBuild incluído em Microsoft. Testing.Platform.MSBuild, que é responsável por executar corretamente aplicações 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. No MTP 1.9, é emitido um aviso com o código MTP0001 quando é detetado um argumento que é ignorado silenciosamente.

Observação

MSTest e NUnit usam o Microsoft.Testing.Extensions.VSTestBridge. Definindo EnableMSTestRunner ou EnableNUnitRunner (o que permite Microsoft. Testing.Platform), o seu projeto de teste suportará tanto o VSTest como a Microsoft. Teste.Plataforma. 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, previne o risco de introduzir um novo projeto de teste que não defina esta propriedade, o que pode resultar numa solução em que alguns projetos usam VSTest enquanto outros usam Microsoft. Teste.Plataforma. Essa configuração mista pode não funcionar corretamente e é um cenário sem suporte.

Importante

Executar projetos MTP no modo VSTest é considerado legado em favor da experiência mais recente no .NET 10 SDK. O suporte para executar sob este modo será removido na Microsoft.Testing.Platform versão 2 se for executado com o SDK .NET 10. O suporte continua disponível para o SDK .NET 9 e anteriores para compatibilidade retroativa. Para obter mais informações, consulte Migrar para o modo MTP do dotnet test.

A lista seguinte descreve as opções de linha de comandos do comando dotnet test em modo VSTest que são suportadas por Microsoft. Teste.Plataforma. 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>

Mostrar falha por teste

Por padrão, as falhas de teste são resumidas em um arquivo .log e uma única falha por projeto de teste é relatada ao MSBuild.

Para mostrar erros por teste com falha, especifique -p:TestingPlatformShowTestsFailure=true na linha de comando ou adicione a propriedade <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure> ao arquivo de projeto.

Na linha de comando:

dotnet test -p:TestingPlatformShowTestsFailure=true

Mostrar saída completa da plataforma

Por padrão, toda a saída do console que o executável de teste subjacente grava é capturada e oculta do usuário. Isso inclui o banner, informações de versão e informações de teste formatadas.

Para mostrar essas informações junto com a saída do MSBuild, use <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>.

Esta opção não afeta a forma como o framework de teste captura a saída do utilizador escrita por Console.WriteLine ou outras maneiras semelhantes de escrever para o console.

Na linha de comando:

dotnet test -p:TestingPlatformCaptureOutput=false

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".

Misturar VSTest e Microsoft. Testing.Platform (MTP)

Ao executar dotnet test em modo VSTest, recomenda-se evitar incluir tanto VSTest como 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 aplicações de teste MTP no modo VSTest de dotnet test, deve usar Microsoft.Testing.Platform.MSBuild, passar as opções específicas de linha de comandos do MTP após o parâmetro extra --, e definir TestingPlatformDotnetTestSupport como true.
  • As opções de linha de comando orientadas ao VSTest são silenciosamente ignoradas.

Devido a estes problemas, .NET introduziu um novo modo dotnet test especificamente concebido para MTP. Incentivamos os utilizadores de MTP a fazer a transição do modo VSTest dotnet test para o novo modo com o SDK .NET 10.

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

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

Para habilitar esse modo, adicione a seguinte configuração ao seu global.json arquivo:

{
    "test": {
        "runner": "Microsoft.Testing.Platform"
    }
}

Importante

A experiência dotnet test para MTP só é suportada a partir da Microsoft.Testing.Platform versão 1.7.

Como este modo foi especificamente desenhado para a Microsoft. Testing.Platform, nem TestingPlatformDotnetTestSupport nem os -- adicionais são necessários.

Importante

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

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>

Migrar para o modo MTP de dotnet test

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

  1. Adicione test seção ao seu global.json arquivo, como mostrado acima.
  2. Remova TestingPlatformDotnetTestSupport a propriedade MSBuild, pois ela não é mais necessária.
  3. Remova TestingPlatformCaptureOutput e TestingPlatformShowTestsFailure propriedades MSBuild, uma vez que 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 contendo solução), por exemplo, dotnet test MySolution.slnisso deve se tornar dotnet test --solution MySolution.sln.
  6. Se passar um projeto específico (ou diretório contendo projeto), por exemplo, dotnet test MyProject.csproj, isto deve converter-se em dotnet test --project MyProject.csproj.
  7. Se passar uma dll específica, por exemplo, dotnet test path/to/UnitTests.dllisso deve se tornar dotnet test --test-modules path/to/UnitTests.dll. Note que --test-modules também suporta globbing.