Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver avancerade konfigurationsalternativ för MSTest.Sdk. Grundläggande konfiguration och kom igång finns i Kom igång med MSTest.
Viktigt!
Som standard använder MSTest.Sdk MSTest-löparen med MTP, inklusive med dotnet-test. Detta kräver att du ändrar dina CI- och lokala CLI-anrop och även påverkar de tillgängliga posterna i .runsettings. Du kan behålla de gamla integreringarna och verktygen genom att byta till VSTest.
MSTest.Sdk ställer in EnableMSTestRunner och TestingPlatformDotnetTestSupport till true som standard. Mer information om dotnet-test och dess olika lägen finns i Testa med dotnet-test.
Testa hjälpbibliotek för verktyg
Om den project som använder MSTest.Sdk är avsedd att vara ett hjälpbibliotek för testverktyg och inte i sig innehåller några körbara tester, bör project ha <IsTestApplication>false</IsTestApplication>.
Välj löparen
Som standard förlitar sig MSTest SDK på MTP, men du kan växla till VSTest genom att lägga till egenskapen <UseVSTest>true</UseVSTest>.
Utöka MTP
Du kan anpassa MTP-upplevelsen via en uppsättning NuGet-pakettillägg. För att förenkla och förbättra den här upplevelsen introducerar MSTest SDK två funktioner:
Microsoft. Testing.Platform-profil
Med begreppet profiler kan du välja standarduppsättningen med konfigurationer och tillägg som ska tillämpas på ditt test project.
Du kan ställa in profilen med hjälp av egenskapen TestingExtensionsProfile och välja en av följande tre profiler:
None– Inga tillägg är aktiverade.Default– Aktiverar de rekommenderade tilläggen för den här versionen av MSTest.SDK. Detta är standardvärdet när egenskapen inte anges explicit.Aktiverar följande tillägg:
- kodtäckning
- Trx-rapport
- Azure DevOps rapport (MSTest.Sdk 4.3.0+)
- GitHub Actions rapport (experimentell och förhandsversion, MSTest.Sdk 4.3.0+)
AllMicrosoft– Aktiverar de Microsoft tillägg som valts för bred användning, inklusive tillägg med en begränsande licens. Experimentella tillägg och API-tillägg kan fortfarande kräva explicit opt-in.Aktiverar alla tillägg från profilen
Default, plus följande tillägg:- Kraschdump
- Förfalskningar (MSTest.Sdk 3.7.0+)
- Hängdump
- Hot Reload
- HTML-rapport
- försök igen
I MSTest.Sdk-versionerna 3.11.0 till 4.2.x ingår tillägget Azure DevOps Rapport endast i
AllMicrosoft.
Anteckning
Profilerna hänvisar till paketen Azure DevOps Report och GitHub Actions Report, men rapporteringen förblir inaktiverad under körning. Skicka --report-azdo för att aktivera Azure DevOps rapportering. Om du vill aktivera GitHub Actions rapportering kör du testerna på GitHub Actions och skickar --report-gh.
Här är ett fullständigt exempel med hjälp av profilen None :
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
</Project>
| Förlängning/Profil | Ingen | Förval | AllMicrosoft |
|---|---|---|---|
| kodtäckning | ✔️ | ✔️ | |
| Kraschdump | ✔️ | ||
| Förfalskningar | ✔️¹ | ||
| Hängdump | ✔️ | ||
| Hot Reload | ✔️ | ||
| HTML-rapport | ✔️ | ||
| GitHub Actions-rapport | ✔️³ | ✔️³ | |
| försök igen | ✔️ | ||
| Trx | ✔️ | ✔️ | |
| Azure DevOps rapport | ✔️³ | ✔️² |
¹ MSTest.Sdk 3.7.0+ ² MSTest.Sdk 3.11.0+ ³ MSTest.Sdk 4.3.0+
Aktivera eller inaktivera tillägg
Tillägg kan aktiveras och inaktiveras av MSBuild-egenskaper med mönstret Enable[NugetPackageNameWithoutDots].
Om du till exempel vill aktivera kraschdumptillägget (NuGet-paketet Microsoft. Testing.Extensions.CrashDump) kan du använda följande egenskap EnableMicrosoftTestingExtensionsCrashDump inställd på true:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
</Project>
En lista över alla tillgängliga tillägg finns i MTP-funktioner.
Vissa MTP-tillägg är fortfarande valfria och ingår inte i profilerna Default eller AllMicrosoft:
- Från och med MSTest.Sdk 4.3 anger du
<EnableMicrosoftTestingExtensionsJUnitReport>true</EnableMicrosoftTestingExtensionsJUnitReport>, och sedan skickar du--report-junit. - Från och med förhandsversion 4.4 av MSTest.Sdk ställer du in
<EnableMicrosoftTestingExtensionsCtrfReport>true</EnableMicrosoftTestingExtensionsCtrfReport>och skickar sedan--report-ctrf. - Om du vill referera till OpenTelemetry-tillägget anger du
<EnableMicrosoftTestingExtensionsOpenTelemetry>true</EnableMicrosoftTestingExtensionsOpenTelemetry>. Eftersom tillägget kräver API-konfiguration registrerar du det i din anpassade startpunkt enligt beskrivningen i OpenTelemetry.
Dessa tillägg är endast tillgängliga med MTP.
Varning
Det är viktigt att granska licensvillkoren för varje tillägg eftersom de kan variera.
Aktiverade och inaktiverade tillägg kombineras med tilläggen som tillhandahålls av den valda tilläggsprofilen.
Det här egenskapsmönstret kan användas för att aktivera ytterligare ett tillägg ovanpå den implicita Default profilen (som du såg i föregående CrashDumpExtension-exempel).
Du kan också inaktivera ett tillägg som kommer från den valda profilen. Inaktivera MS Code Coverage till exempel tillägget genom att ange <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
</Project>
I MSTest.Sdk 4.3.0 och senare refererar profilen till paketen Default Azure DevOps Report och GitHub Actions Report. Om du vill ta bort antingen paketreferensen anger du <EnableMicrosoftTestingExtensionsAzureDevOpsReport>false</EnableMicrosoftTestingExtensionsAzureDevOpsReport> eller <EnableMicrosoftTestingExtensionsGitHubActionsReport>false</EnableMicrosoftTestingExtensionsGitHubActionsReport>. Om du behåller paketreferenserna startar Azure DevOps rapportering endast när du skickar --report-azdo. GitHub Actions rapportering startar bara när du kör testerna på GitHub Actions och skickar --report-gh.
Funktioner
Förutom urvalet av löpare och löparspecifika tillägg, tillhandahåller MSTest.Sdk också funktioner för att ytterligare förenkla och förbättra din testupplevelse.
Testa med Aspire
Aspire är en åsiktsbaserad, molnklar stack för att skapa observerbara, produktionsklara, distribuerade program. Aspire levereras via en samling NuGet-paket som hanterar specifika molnbaserade problem. Mer information finns i Aspire dokumenten.
Anteckning
Den här funktionen är tillgänglig från MSTest.Sdk 3.4.0.
Genom att ange egenskapen EnableAspireTesting till truekan du ta med alla beroenden och standarddirektiv using som du behöver för testning med Aspire och MSTest.
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableAspireTesting>true</EnableAspireTesting>
</PropertyGroup>
</Project>
Testa med Playwright
Playwright möjliggör tillförlitlig testning från slutpunkt till slutpunkt för moderna web apps. Mer information finns i de officiella dramatikerdokumenten.
Anteckning
Den här funktionen är tillgänglig från MSTest.Sdk 3.4.0.
Genom att ställa in egenskapen EnablePlaywright på true kan du ta in alla beroenden och standarddirektiv using som du behöver för testning med Playwright och MSTest.
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnablePlaywright>true</EnablePlaywright>
</PropertyGroup>
</Project>
Migrera till MSTest SDK
Överväg följande steg som krävs för att migrera till MSTest SDK.
Uppdatera din project
När du migrerar ett befintligt MSTest-testprojekt till MSTest SDK börjar du med att ersätta posten Sdk="Microsoft.NET.Sdk" överst i testprojektet med Sdk="MSTest.Sdk"
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"
Lägg till versionen i global.json:
{
"msbuild-sdks": {
"MSTest.Sdk": "4.1.0"
}
}
Du kan sedan börja förenkla projekt.
Ta bort standardegenskaper:
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>
Ta bort standardpaketreferenser:
- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"
Slutligen kan du, baserat på tilläggsprofilen du använder, även ta bort några av paketen Microsoft.Testing.Extensions.*.
Uppdatera din CI
När du har uppdaterat dina projekt måste du uppdatera CI-konfigurationen om du använder MTP (standard) och om du förlitar dig på dotnet test att köra dina tester. Mer information och vägledning för din förståelse av alla nödvändiga ändringar finns i dotnet-testintegrering.
Om du använder VSTest-läget för dotnet test, här är en exempeluppdatering när du använder uppgiften DotNetCoreCLI i Azure DevOps:
Standardprofilen för MSTest.Sdk-tillägget tillhandahåller de Microsoft.Testing.Extensions.TrxReport paket och Microsoft.Testing.Extensions.CodeCoverage som krävs av de tillagda alternativen. Om du väljer profilen None, aktivera eller hänvisa till båda tilläggen innan du använder alternativen.
\- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/**.sln'
- arguments: '--configuration Release'
+ arguments: '--configuration Release -- --report-trx --results-directory $(Agent.TempDirectory) --coverage'
Generator för reflektionskälla
Viktigt!
Följande MSTest 4.4-beteende är endast tillgängligt i förhandsversioner tills MSTest 4.4.0 släpps.
MSTest 4.3 introducerade reflektionskällgeneratorn i det experimentella paketet MSTest.SourceGeneration, som versionshanteras oberoende. Från och med MSTest 4.4 tar paketet examen från experimentell status och använder MSTest-versionen.
Interna AOT-projekt inkluderar källgeneratorn automatiskt. För ett icke-NativeAOT-projekt som använder MSTest.Sdk aktiverar du detta med <EnableMSTestSourceGeneration>true</EnableMSTestSourceGeneration>. MSTest.Sdk justerar versionerna MSTest.SourceGeneration, MSTest.TestFrameworkoch MSTest.TestAdapter via MSTestVersion.
SDK stöder också källgenerering i återanvändbara testbibliotek och projekt som använder Central Package Management. Den tillhandahåller matchande MSTest.TestAdapter runtime-hookar och genererar de PackageVersion-objekt som krävs.
.NET Standard stöder inte dessa anslutningspunkter för körning. När du aktiverar källgenerering för ett .NET Standard-mål rapporterar SDK följande fel:
MSTest-källgenerering stöds inte för .NET Standard-målramverk eftersom nödvändiga MSTest.TestAdapter-körningskrokar inte är tillgängliga.
Källgeneratorn identifierar tester vid kompileringstillfället. När generatorn är aktiv måste testklasserna deklarera [TestClass] direkt i stället för att ärva den.
MSTEST0069-analysatorn flaggar klasser som är beroende av en ärvd [TestClass].
Från och med MSTest 4.3.2 är MSTestSourceGenMode standardvärdet ReflectionFree för trimmade och interna AOT-projekt. Det här läget använder genererade metadata och anropare där det stöder testformen. I körningsmiljöer som stöder reflektion faller MSTest tillbaka på reflektion för genererade poster som inte stöds eller saknas.
Från och med MSTest 4.4 materialiserar den reflektionsfria generationen fullständiga ärvda attributmetadata, inklusive AttributeUsage och AllowMultiple. I MTP kan det kringgå upptäckt och validering vid körning för enkla synkrona [TestMethod]- och [DataRow]-metoder. Asynkrona tester, anpassade testmetodattribut, DynamicData, anpassade ITestDataSource-implementeringar och tvetydiga testutformningar använder reservvägen. VSTest behåller också sin befintliga sökväg.
Reflektionsfritt läge rapporterar följande diagnostik:
| ID | Testform som inte stöds |
|---|---|
AOTSG0001 |
Statisk testklass |
AOTSG0002 |
Öppen generisk testklass, inklusive en klass kapslad i en generisk typ |
AOTSG0003 |
Klass som den genererade koden inte kan komma åt, inklusive en fil-lokal klass eller privat eller private-protected-kapsling |
AOTSG0004 |
Allmän testmetod |
AOTSG0005 |
Testmetod med parametern ref, ineller out |
Experimentella funktioner
Följande MSTest 4.3-funktioner är experimentella. Deras offentliga API:er kan komma att ändras och de visas bakom experimentell diagnostik. Om du vill anmäla dig bekräftar du motsvarande diagnostik-ID.
Programmatisk filtrering av tester med ITestFilter
Anteckning
Introducerades i MSTest 4.3.0 (experimentell).
Med den experimentella ITestFilter tilläggspunkten, som registrerats via [TestFilterProviderAttribute], kan du programmatiskt avgöra om varje test körs innan någon testklass läses in. Detta är användbart för anpassad markeringslogik som inte kan uttryckas med kommandoradsfilter.
Implementera ITestFilter.Filter(TestFilterContext) för att inspektera metadata utan att läsa in testklassen:
public sealed class MyFilter : ITestFilter
{
public TestFilterResult Filter(TestFilterContext context) =>
context.DisplayName.Contains("Nightly", StringComparison.Ordinal)
? TestFilterResult.Run : TestFilterResult.Drop;
}
Gå tillbaka TestFilterResult.Run för att köra testet, Drop utelämna det utan resultat eller Skip(reason) rapportera ett överhoppat resultat. MSTest kan anropa en filterinstans samtidigt, så implementeringar måste vara trådsäkra. Kommandorads- och testutforskarefilter körs före ITestFilter, medan [Ignore] utvärderas efteråt.
Från och med MSTest 4.4 kan .NET projekt använda det generiska, typsäkra registreringsformuläret [assembly: TestFilterProvider<MyFilter>]. Kompilatorn framtvingar sedan som MyFilter implementerar ITestFilter och har en offentlig parameterlös konstruktor. Det allmänna attributet är inte tillgängligt för .NET Framework. För ett projekt med flera mål väljer du det generiska eller icke-generiska formuläret med en förprocessorsymbol för målramverket.
#if NET
[assembly: TestFilterProvider<MyFilter>]
#else
[assembly: TestFilterProvider(typeof(MyFilter))]
#endif
Från och med MSTest 4.4 validerar MSTEST0081-analysatorn helt det icke-generiska registreringsformuläret. För det allmänna formuläret rapporterar det fortfarande generiska filtertyper och sammansättningar som registrerar fler än en provider.
TestRun.Current och planerade tester
Anteckning
Introducerades i MSTest 4.3.0 (experimentell).
Det experimentella TestRun.Current API:t (från RFC 014) ger information om den aktuella körningen, inklusive uppsättningen med planerade tester, så att tillägg och fixturer kan granska vad som är schemalagt att köras.
Kända begränsningar
NuGet-tillhandahållna MSBuild-SDK:er (inklusive MSTest.Sdk) har limited tooling support när det gäller att uppdatera sin version, vilket innebär att den vanliga NuGet-uppdateringen och Visual Studio användargränssnittet för att hantera NuGet-paket inte fungerar som förväntat. Du måste uppdatera versionen manuellt i filen global.json och i filen project. (Detta gäller även om du använder Dependabot på grund av problem dependabot-core#12824 och dependabot-core#8615.)