Köra tester med MSTest

Tips/Råd

Innan du väljer en runner-konfiguration kan du läsa Översikt över testplattformar.

Det finns flera sätt att köra MSTest-tester beroende på dina behov. Du kan köra tester från en IDE (till exempel Visual Studio, Visual Studio Code eller JetBrains Rider) eller från kommandoraden eller från en CI-tjänst (till exempel GitHub Actions eller Azure DevOps).

Tidigare förlitade sig MSTest på VSTest för att köra tester i alla kontexter, men från och med version 3.2.0 har MSTest sin egen testlöpare. Den här nya löparen är enklare och snabbare än VSTest, och det är det rekommenderade sättet att köra MSTest-tester.

VSTest vs MTP

MSTest stöder körning av tester med både VSTest och Microsoft.Testing.Platform (MTP). Stödet för MTP drivs av MSTest-löparen, som kan köra tester i alla kontexter (till exempel kontinuerlig integrering (CI) pipelines, CLI, Visual Studio Test Explorer och VS Code Text Explorer). MSTest-löparen är inbäddad direkt i dina MSTest-testprojekt, och det finns inga andra appberoenden, som vstest.console eller dotnet test, som behövs för att köra dina tester. Du kan dock fortfarande köra dina tester med .dotnet test

MSTest-löparen är open-source och bygger på biblioteket MTP. Du hittar Microsoft.Testing.Platform-kod på lagringsplatsen microsoft/testfx GitHub. MSTest-testverktyget levereras med MSTest in 3.2.0 eller senare.

Aktivera MTP i ett MSTest-projekt

Använd MSTest SDK för att förenkla projektkonfigurationen, versionshanteringen och justeringen av MTP och dess tillägg avsevärt.

MSTest.Sdk ersätter Microsoft.NET.Sdk som projektets SDK, och MTP är aktiverat som standard:

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

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

</Project>

Note

MSTest.Sdk fungerar bara när projektet kan använda Microsoft.NET.Sdk som bas-SDK. Om ditt projekt kräver ett annat SDK, ersätt inte värdet för <Project Sdk="..."> med MSTest.Sdk.

Till exempel använder Microsoft.NET.Sdk.Webvissa ASP.NET Core integrationstestprojekt . MSTest.Sdk härleds från Microsoft.NET.Sdk, så importerar det inte de ASP.NET Core SDK-mål som Microsoft.NET.Sdk.Web tillhandahåller.

Du kan också konfigurera MSTest manuellt i stället för att använda MSTest.Sdk. Manuell konfiguration krävs när projektet behöver en annan SDK på toppnivå (till exempel Microsoft.NET.Sdk.Web), men du kan också välja den med standarden Microsoft.NET.Sdk. EnableMSTestRunner Lägg till egenskapen och ange OutputType till Exe i projektfilen. Lägg sedan till de MSTest-referenser som projektet kräver. Kontrollera att du använder MSTest 3.2.0 eller senare och uppdatera till den senaste tillgängliga MSTest-versionen.

Tänk på följande projektfil exempel:

<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/unit-testing-with-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>

Tips/Råd

För att säkerställa att alla testprojekt i lösningen använder MSTest-löparen anger du egenskaperna EnableMSTestRunner och TestingPlatformDotnetTestSupport i Directory.Build.props i stället för enskilda project filer.

Konfigurationer och filter

.runsettings

MTP stöder runsettings genom kommandoradsalternativet --settings. Den fullständiga listan över MSTest-poster som stöds finns i Konfigurera MSTest: Runsettings. Följande kommandon visar olika användningsexempel.

Att använda dotnet run:

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

Att använda dotnet exec:

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

-or-

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

Använd den körbara filen:

Contoso.MyTests.exe --settings config.runsettings

Testfilter

Du kan ange testfiltret sömlöst med hjälp av kommandoradsalternativet --filter. Följande kommandon visar några exempel.

Att använda dotnet run:

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

Att använda dotnet exec:

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

-or-

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

Använd den körbara filen:

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

Se även