Panoramica dello strumento di esecuzione MSTest

Lo strumento di esecuzione MSTest è un'alternativa leggera e portabile a VSTest per l'esecuzione di test in tutti i contesti (ad esempio, pipeline di integrazione continua, interfaccia della riga di comando, Editor elenco dei test di Visual Studio, Editor elenco dei test di VS Code). Lo strumento di esecuzione MSTest è incorporato direttamente nei progetti di test MSTest e non sono necessarie altre dipendenze dell'app, come ad esempio vstest.console o dotnet test per eseguire i test.

Lo strumento di esecuzione MsTest è open source e si basa su una libreria Microsoft.Testing.Platform. È possibile trovare il codice Microsoft.Testing.Platform nel repository microsoft/testfx di GitHub. Lo strumento di esecuzione MSTest viene fornito in bundle con MSTest in 3.2.0-preview.23623.1 o versione successiva.

Abilitare lo strumento di esecuzione MSTest in un progetto MSTest

È consigliabile utilizzare MSTest SDK perché semplifica notevolmente la configurazione e l'aggiornamento del progetto e garantisce l'allineamento corretto delle versioni della piattaforma (strumento di esecuzione MSTest) e delle relative estensioni.

Quando si usa MSTest SDK, per impostazione predefinita si acconsente esplicitamente all'utilizzo dello strumento di esecuzione di MSTest.

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

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

</Project>

In alternativa, è possibile abilitare lo strumento di esecuzione MSTest aggiungendo la proprietà EnableMSTestRunner e impostando OutputType su Exe nel file di progetto. È anche necessario assicurarsi di usare MSTest 3.2.0-preview.23623.1 o versione successiva.

Si consideri il file di progetto di esempio seguente:

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

  <PropertyGroup>
    <!-- Enable the MSTest runner, this is an opt-in feature -->
    <EnableMSTestRunner>true</EnableMSTestRunner>
    <OutputType>Exe</OutputType>

    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>
  </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
    -->
    <PackageReference Include="MSTest" Version="3.2.0" />

    <!--
      Coverlet collector isn't compatible with MSTest runner, you can
      either switch to Microsoft CodeCoverage (as shown below),
      or switch to be using coverlet global tool
      https://github.com/coverlet-coverage/coverlet#net-global-tool-guide-suffers-from-possible-known-issue
    -->
    <PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage"
                      Version="17.10.1" />
  </ItemGroup>

</Project>

Configurazioni e filtri

.runsettings

Lo strumento di esecuzione MSTest supporta runsettings tramite l'opzione della riga di comando --settings. Per l'elenco completo delle voci MSTest supportate, vedere Configurare MSTest: Runsettings. I comandi seguenti mostrano vari esempi di utilizzo.

Utilizzo di dotnet run:

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

Utilizzo di dotnet exec:

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

oppure

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

Uso del file eseguibile:

Contoso.MyTests.exe --settings config.runsettings

Filtro dei test

È possibile fornire il filtro di test con semplicità usando l'opzione della riga di comando --filter. I comandi seguenti mostrano alcuni esempi.

Utilizzo di dotnet run:

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

Utilizzo di dotnet exec:

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

oppure

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

Uso del file eseguibile:

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