Partilhar via


Executar testes com MSTest

Sugestão

Antes de escolher uma configuração de runner, consulte a visão geral das plataformas de teste.

Há várias maneiras de executar testes MSTest, dependendo de suas necessidades. Pode correr testes a partir de um IDE (por exemplo, Visual Studio, Visual Studio Code ou JetBrains Rider), ou da linha de comandos, ou de um serviço CI (como GitHub Actions ou Azure DevOps).

Historicamente, o MSTest dependia do VSTest para executar testes em todos os contextos, mas a partir da versão 3.2.0, o MSTest tem o seu próprio executor de testes. Este novo executor é mais leve e mais rápido do que o VSTest, sendo a maneira recomendada de executar testes MSTest.

VSTest vs Microsoft.Testing.Platform (MTP)

O MSTest suporta a execução de testes tanto com o VSTest como com o Microsoft.Testing.Platform (MTP). O suporte para MTP é alimentado pelo runner MSTest, que pode executar testes em todos os contextos (por exemplo, pipelines de integração contínua (CI), CLI, Visual Studio Test Explorer e VS Code Text Explorer). O runner MSTest está integrado diretamente nos seus projetos de teste MSTest, e não são necessárias outras dependências de aplicação, como vstest.console ou dotnet test, para executar os seus testes. No entanto, ainda pode executar os seus testes usando dotnet test.

O runner MSTest é open source e baseia-se na biblioteca Microsoft.Testing.Platform. Pode encontrar código Microsoft.Testing.Platform no repositório microsoft/testfx GitHub. O MSTest Runner vem incluído com MSTest in 3.2.0 ou mais recente.

Ativar o Microsoft.Testing.Platform num projeto MSTest

Recomenda-se usar o SDK MSTest pois simplifica muito a configuração e a atualização do projeto, e garante um alinhamento adequado das versões da plataforma (Microsoft.Testing.Platform) e das suas extensões.

Quando usas MSTest SDK, por defeito, estás autorizado a usar o Microsoft.Testing.Platform.

<Project Sdk="MSTest.Sdk/4.1.0">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

Em alternativa, podes ativar o MSTest runner adicionando a propriedade EnableMSTestRunner e definindo OutputType para Exe no teu ficheiro de project. Também precisa de garantir que está a usar MSTest 3.2.0 ou uma versão mais recente. Recomendamos vivamente que atualize para a versão mais recente do MSTest disponível.

Considere o seguinte ficheiro de projeto exemplo:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <!-- Enable Microsoft.Testing.Platform, this is an opt-in feature -->
    <EnableMSTestRunner>true</EnableMSTestRunner>
    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>

    <!--
      Displays error on console in addition to the log file. Note that this feature comes with a performance impact.
      For more information, visit https://learn.microsoft.com/dotnet/core/testing/microsoft-testing-platform-integration-dotnet-test#show-failure-per-test
      -->
    <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>

    <OutputType>Exe</OutputType>

    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <!--
      MSTest meta package is the recommended way to reference MSTest.
      It's equivalent to referencing:
          Microsoft.NET.Test.Sdk
          MSTest.TestAdapter
          MSTest.TestFramework
          MSTest.Analyzers
      Starting with 3.8, it also includes:
          Microsoft.Testing.Extensions.TrxReport
          Microsoft.Testing.Extensions.CodeCoverage
    -->
    <PackageReference Include="MSTest" Version="4.1.0" />
  </ItemGroup>

</Project>

Sugestão

Para garantir que todos os projetos de teste na sua solução usem o runner MSTest, defina as propriedades EnableMSTestRunner e TestingPlatformDotnetTestSupport no ficheiro Directory.Build.props em vez de ficheiros individuais de project.

Configurações e filtros

.runsettings

O Microsoft.Testing.Platform suporta as definições de execução através da opção --settingsde linha de comandos. Para a lista completa de entradas MSTest suportadas, veja Configurar MSTest: Runsettings. Os comandos seguintes mostram vários exemplos de utilização.

Utilização de dotnet run:

dotnet run --project Contoso.MyTests -- --settings config.runsettings

Utilização de dotnet exec:

dotnet exec Contoso.MyTests.dll --settings config.runsettings

-ou-

dotnet Contoso.MyTests.dll --settings config.runsettings

Usando o executável:

Contoso.MyTests.exe --settings config.runsettings

Filtro de testes

Pode fornecer os testes filtro de forma fluida usando a opção de linha de comando --filter. Os comandos seguintes mostram alguns exemplos.

Utilização de dotnet run:

dotnet run --project Contoso.MyTests -- --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

Utilização de dotnet exec:

dotnet exec Contoso.MyTests.dll --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

-ou-

dotnet Contoso.MyTests.dll --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

Usando o executável:

Contoso.MyTests.exe --filter "FullyQualifiedName~UnitTest1|TestCategory=CategoryA"

Consulte também