Partager via


Vue d’ensemble de MSTest Runner

L’exécuteur MSTest est une alternative légère et portable à VSTest pour l’exécution de tests dans tous les contextes (par exemple, les pipelines d’intégration continue (CI), l’interface de ligne de commande (CLI), l’explorateur de test Visual Studio et l’explorateur de texte VS Code). L’exécuteur MSTest est incorporé directement dans vos projets de test MSTest, et il n’existe aucune autre dépendance d’application,telles que vstest.console ou dotnet test, nécessaire pour exécuter vos tests.

L’exécuteur MSTest est open source et s’appuie sur une bibliothèque Microsoft.Testing.Platform. Vous trouverez du code Microsoft.Testing.Platform dans le référentiel GitHub microsoft/testfx. L’exécuteur MSTest est fourni avec MSTest in 3.2.0-preview.23623.1 ou version ultérieure.

Activer l’exécuteur MSTest dans un projet MSTest

Il est recommandé d’utiliser le kit de développement logiciel (SDK) MSTest, car il simplifie considérablement la configuration de votre projet, sa mise à jour et garantit un alignement approprié des versions de la plateforme (exécuteur MSTest) et de ses extensions.

Lorsque vous utilisez MSTest SDK, vous êtes par défaut autorisé à utiliser le programme d’exécution MSTest.

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

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

</Project>

Sinon, vous pouvez activer l’exécuteur MSTest en ajoutant la propriété EnableMSTestRunner et le paramètre OutputType à Exe dans votre fichier projet. Vous devez également vous assurer d’utiliser MSTest 3.2.0-preview.23623.1 ou version ultérieure.

Prenez l’exemple de fichier projet suivant :

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

Configurations et filtres

.runsettings

L’exécuteur MSTest prend en charge le runsettings par l’option --settings en ligne de commande. Les commandes suivantes donnent des exemples.

Utilisation de dotnet run:

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

Utilisation de dotnet exec:

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

-ou-

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

Utilisation de l’exécutable :

Contoso.MyTests.exe --settings config.runsettings

Filtre de tests

Vous pouvez fournir les filtre de tests en toute transparence à l’aide de l’option --filter en ligne de commande. Les commandes suivantes en donnent quelques exemples.

Utilisation de dotnet run:

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

Utilisation de dotnet exec:

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

-ou-

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

Utilisation de l’exécutable :

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