Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden geavanceerde configuratieopties voor MSTest.Sdk behandeld. Zie Get started met MSTest voor basisinstellingen en om aan de slag te gaan.
Belangrijk
MSTest.Sdk maakt standaard gebruik van de MSTest runner met MTP, inclusief dotnet-test. Hiervoor moet u uw CI- en lokale CLI-aanroepen wijzigen, wat ook van invloed is op de beschikbare vermeldingen van de .runsettings. U kunt de oude integraties en hulpprogramma's behouden door over te schakelen naar VSTest.
MSTest.Sdk stelt EnableMSTestRunner standaard in en TestingPlatformDotnetTestSupport op true. Zie Testen met dotnet-test voor meer informatie over dotnet-test en de verschillende modi.
Helperbibliotheken voor hulpprogramma's testen
Als de project die gebruikmaakt van MSTest.Sdk een helperbibliotheek voor testhulpprogramma's is en zelf geen runnable tests bevat, moet de project <IsTestApplication>false</IsTestApplication> hebben.
Selecteer de loper
MSTest SDK is standaard afhankelijk van MTP, maar u kunt overschakelen naar VSTest door de eigenschap <UseVSTest>true</UseVSTest>toe te voegen.
MTP uitbreiden
U kunt de MTP-ervaring aanpassen via een set NuGet-pakketextensies. MsTest SDK introduceert twee functies om deze ervaring te vereenvoudigen en te verbeteren:
Microsoft. Testing.Platform-profiel
Met het concept van profiles kunt u de standaardset configuraties en extensies selecteren die worden toegepast op uw test-project.
U kunt het profiel instellen met behulp van de eigenschap TestingExtensionsProfile met een van de volgende drie profielen:
None- Er zijn geen extensies ingeschakeld.Default- Hiermee schakelt u de aanbevolen extensies in voor deze versie van MSTest.SDK. Dit is de standaardinstelling wanneer de eigenschap niet expliciet is ingesteld.Hiermee worden de volgende extensies ingeschakeld:
- Codedekking
- Trx-rapport
- Azure DevOps rapport (MSTest.Sdk 4.3.0+)
- GitHub Actions rapport (experimenteel en voorlopige versie, MSTest.Sdk 4.3.0+)
AllMicrosoft- Hiermee schakelt u de Microsoft-extensies in die zijn geselecteerd voor breed out-of-the-box-gebruik, inclusief extensies met een beperkende licentie. Experimentele extensies en extensies die alleen via de API beschikbaar zijn, kunnen nog steeds expliciete toestemming vereisen.Hiermee schakelt u alle extensies uit het
Defaultprofiel in, plus de volgende extensies:- Crashdump
- Neps (MSTest.Sdk 3.7.0+)
- hangdump
- Hot Reload
- HTML-rapport
- opnieuw proberen
In MSTest.Sdk-versies 3.11.0 tot en met 4.2.x is de Azure DevOps Rapportextensie alleen opgenomen in
AllMicrosoft.
Notitie
De profielen verwijzen naar de pakketten Azure DevOps Rapport en GitHub Actions Rapport, maar rapportage blijft tijdens runtime uitgeschakeld. Geef door --report-azdo om Azure DevOps rapportage in te schakelen. Als u GitHub Actions-rapportage wilt inschakelen, voert u de tests uit op GitHub Actions en geeft u --report-gh mee.
Hier volgt een volledig voorbeeld met behulp van het None profiel:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
</Project>
| Extensie/Profiel | Geen | Verstek | AllMicrosoft |
|---|---|---|---|
| Codedekking | ✔️ | ✔️ | |
| Crashdump | ✔️ | ||
| Fakes | ✔️¹ | ||
| hangdump | ✔️ | ||
| Hot Reload | ✔️ | ||
| HTML-rapport | ✔️ | ||
| rapport GitHub Actions | ✔️³ | ✔️³ | |
| opnieuw proberen | ✔️ | ||
| Trx | ✔️ | ✔️ | |
| rapport Azure DevOps | ✔️³ | ✔️² |
¹ MSTest.Sdk 3.7.0+ ² MSTest.Sdk 3.11.0+ ³ MSTest.Sdk 4.3.0+
Extensies in- of uitschakelen
Extensies kunnen worden ingeschakeld en uitgeschakeld door MSBuild-eigenschappen met het patroon Enable[NugetPackageNameWithoutDots].
Als u bijvoorbeeld de crashdumpextensie (NuGet-pakket Microsoft.Testing.Extensions.CrashDump) wilt inschakelen, kunt u de volgende eigenschap EnableMicrosoftTestingExtensionsCrashDump instellen op true:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
</Project>
Zie MTP-functies voor een lijst met alle beschikbare extensies.
Sommige MTP-extensies blijven opt-in en zijn niet opgenomen in de Default of AllMicrosoft profielen:
- Vanaf MSTest.Sdk 4.3 stelt u
<EnableMicrosoftTestingExtensionsJUnitReport>true</EnableMicrosoftTestingExtensionsJUnitReport>in en geeft u--report-junitdoor. - Vanaf de MSTest.Sdk 4.4-preview stelt u
<EnableMicrosoftTestingExtensionsCtrfReport>true</EnableMicrosoftTestingExtensionsCtrfReport>in en geeft u vervolgens--report-ctrfdoor. - Als u wilt verwijzen naar de OpenTelemetry-extensie, stelt u in
<EnableMicrosoftTestingExtensionsOpenTelemetry>true</EnableMicrosoftTestingExtensionsOpenTelemetry>. Omdat voor de extensie API-configuratie is vereist, moet u deze registreren in uw aangepaste toegangspunt, zoals beschreven in OpenTelemetry.
Deze extensies zijn alleen beschikbaar met MTP.
Waarschuwing
Het is belangrijk om de licentievoorwaarden voor elke extensie te bekijken, omdat deze kunnen variëren.
Ingeschakelde en uitgeschakelde extensies worden gecombineerd met de extensies die worden geleverd door uw geselecteerde extensieprofiel.
Dit eigenschapspatroon kan worden gebruikt om een extra extensie boven op het impliciete Default profiel in te schakelen (zoals te zien is in het vorige CrashDumpExtension-voorbeeld).
U kunt ook een extensie uitschakelen die afkomstig is van het geselecteerde profiel. Schakel bijvoorbeeld de MS Code Coverage extensie uit door het volgende in te stellen <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>:
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
</Project>
In MSTest.Sdk 4.3.0 en hoger verwijst het Default profiel naar de pakketten Azure DevOps Rapport en GitHub Actions Rapport. Als u een van beide pakketreferenties wilt verwijderen, stelt u <EnableMicrosoftTestingExtensionsAzureDevOpsReport>false</EnableMicrosoftTestingExtensionsAzureDevOpsReport> of <EnableMicrosoftTestingExtensionsGitHubActionsReport>false</EnableMicrosoftTestingExtensionsGitHubActionsReport> in. Als u de pakketverwijzingen behoudt, begint Azure DevOps-rapportage pas wanneer u --report-azdo opgeeft. GitHub Actions-rapportage start alleen wanneer u de tests uitvoert op GitHub Actions en --report-gh meegeeft.
Functies
Naast de selectie van de runner en runner-specifieke extensies, biedt MSTest.Sdk u ook aanvullende functies om uw testervaring te vereenvoudigen en te verbeteren.
Testen met Aspire
Aspire is een bevooroordelde, cloudklare stack voor het bouwen van waarneembare, productieklare, gedistribueerde toepassingen. Aspire wordt geleverd via een verzameling NuGet-pakketten die specifieke cloudeigen problemen verwerken. Zie de Aspire documenten voor meer informatie.
Notitie
Deze functie is beschikbaar via MSTest.Sdk 3.4.0.
Door de eigenschap EnableAspireTesting in te stellen op true, kunt u alle benodigde afhankelijkheden en standaardrichtlijnen using voor het testen met Aspire en MSTest verkrijgen.
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnableAspireTesting>true</EnableAspireTesting>
</PropertyGroup>
</Project>
Testen met Playwright
Playwright maakt betrouwbare end-to-end tests mogelijk voor moderne web apps. Zie de officiële Playwright-documenten voor meer informatie.
Notitie
Deze functie is beschikbaar via MSTest.Sdk 3.4.0.
Door de eigenschap EnablePlaywright op true in te stellen, kunt u alle vereiste afhankelijkheden en standaardrichtlijnen using opnemen die nodig zijn voor het testen met Playwright en MSTest.
<Project Sdk="MSTest.Sdk/4.1.0">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<EnablePlaywright>true</EnablePlaywright>
</PropertyGroup>
</Project>
Migreren naar MSTest SDK
Houd rekening met de volgende stappen die nodig zijn om te migreren naar de MSTest SDK.
Uw project bijwerken
Wanneer u een bestaand MSTest-testproject migreert naar MSTest SDK, vervangt u eerst de vermelding Sdk="Microsoft.NET.Sdk" boven aan uw testproject door Sdk="MSTest.Sdk"
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"
Voeg de versie toe aan uw global.json:
{
"msbuild-sdks": {
"MSTest.Sdk": "4.1.0"
}
}
Vervolgens kunt u beginnen met het vereenvoudigen van uw project.
Standaardeigenschappen verwijderen:
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>
Standaardpakketverwijzingen verwijderen:
- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"
Ten slotte kunt u, op basis van het extensiesprofiel dat u gebruikt, ook enkele van de Microsoft.Testing.Extensions.*-pakketten verwijderen.
Uw CI bijwerken
Nadat u uw projecten hebt bijgewerkt, moet u uw CI-configuratie bijwerken als u MTP (standaard) gebruikt en als u afhankelijk bent van dotnet test het uitvoeren van uw tests. Zie dotnet-testintegratie voor meer informatie en om inzicht te krijgen in alle vereiste wijzigingen.
Als u de VSTest-modus van dotnet test gebruikt, ziet u een voorbeeldupdate wanneer u de taak DotNetCoreCLI gebruikt in Azure DevOps:
Het standaard MSTest.Sdk-extensieprofiel levert de Microsoft.Testing.Extensions.TrxReport en Microsoft.Testing.Extensions.CodeCoverage pakketten die vereist zijn voor de toegevoegde opties. Als u het None-profiel selecteert, schakelt u beide extensies in of verwijst u naar beide extensies voordat u de opties gebruikt.
\- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/**.sln'
- arguments: '--configuration Release'
+ arguments: '--configuration Release -- --report-trx --results-directory $(Agent.TempDirectory) --coverage'
Brongenerator voor weerspiegeling
Belangrijk
Het volgende MSTest 4.4-gedrag is alleen beschikbaar in preview-versies totdat MSTest 4.4.0 wordt uitgebracht.
MSTest 4.3 heeft de reflectiebrongenerator geïntroduceerd in het onafhankelijk geversieerde, experimentele MSTest.SourceGeneration pakket. Vanaf MSTest 4.4 is het pakket niet langer experimenteel en wordt de versie van MSTest gebruikt.
Native AOT-projecten bevatten de sourcegenerator automatisch. Voor een niet-NativeAOT-project waarvoor MSTest.Sdk wordt gebruikt, meldt u zich aan met <EnableMSTestSourceGeneration>true</EnableMSTestSourceGeneration>. MSTest.Sdk lijnt de MSTest.SourceGeneration, MSTest.TestFrameworken MSTest.TestAdapter versies uit via MSTestVersion.
De SDK biedt ook ondersteuning voor het genereren van bronnen in herbruikbare testbibliotheken en projecten die gebruikmaken van Central Package Management. Het levert overeenkomende MSTest.TestAdapter runtime-hooks en genereert de vereiste PackageVersion items.
.NET Standard biedt geen ondersteuning voor deze runtime-hooks. Wanneer u brongeneratie inschakelt voor een .NET Standard-doel, rapporteert de SDK deze fout:
MSTest-brongeneratie wordt niet ondersteund voor .NET Standard-doelframeworks omdat de vereiste MSTest.TestAdapter-runtimehook niet beschikbaar zijn.
De brongenerator detecteert tests tijdens het compileren. Wanneer de generator actief is, moeten testklassen rechtstreeks declareren [TestClass] in plaats van deze over te nemen. De MSTEST0069 analyzer markeert klassen die afhankelijk zijn van een overgenomen [TestClass].
Vanaf MSTest 4.3.2 is ReflectionFree standaard voor MSTestSourceGenMode in getrimde en Native AOT-projecten. In deze modus worden gegenereerde metagegevens en aanroepers gebruikt wanneer deze modus de testvorm ondersteunt. Bij runtimes die reflectie ondersteunen, valt MSTest terug op weerspiegeling voor niet-ondersteunde of ontbrekende gegenereerde vermeldingen.
Vanaf MSTest 4.4 materialiseert de generatie zonder reflectie volledige overgenomen kenmerkmetagegevens, waaronder AttributeUsage en AllowMultiple. Bij MTP kan het detectie en validatie tijdens runtime overslaan voor eenvoudige synchrone [TestMethod]- en [DataRow]-methoden. Asynchrone tests, aangepaste kenmerken van testmethoden, DynamicData, aangepaste ITestDataSource-implementaties en dubbelzinnige testvormen gebruiken het terugvalpad. VSTest behoudt ook het bestaande pad.
In de reflectievrije modus worden de volgende diagnostische gegevens gerapporteerd:
| Id | Niet-ondersteunde testvorm |
|---|---|
AOTSG0001 |
Statische testklasse |
AOTSG0002 |
Algemene testklasse openen, inclusief een klasse die is genest in een algemeen type |
AOTSG0003 |
Klasse waartoe gegenereerde code geen toegang heeft, met inbegrip van een bestands-lokale klasse of een persoonlijke of privé-beveiligde nesting |
AOTSG0004 |
Algemene testmethode |
AOTSG0005 |
Testmethode met een ref, inof out parameter |
Experimentele functies
De volgende MSTest 4.3-functies zijn experimenteel. Hun openbare API's kunnen worden gewijzigd en ze worden weergegeven achter experimentele diagnostische gegevens. Als u zich wilt aanmelden, bevestigt u de bijbehorende diagnostische id.
Programmeerbaar filteren van tests met ITestFilter
Notitie
Geïntroduceerd in MSTest 4.3.0 (experimenteel).
Met het experimentele ITestFilter uitbreidingspunt, geregistreerd via [TestFilterProviderAttribute], kunt u programmatisch beslissen of elke testuitvoering wordt uitgevoerd, voordat een testklasse wordt geladen. Dit is handig voor aangepaste selectielogica die niet kan worden uitgedrukt met opdrachtregelfilters.
Implementeren ITestFilter.Filter(TestFilterContext) om metagegevens te controleren zonder de testklasse te laden:
public sealed class MyFilter : ITestFilter
{
public TestFilterResult Filter(TestFilterContext context) =>
context.DisplayName.Contains("Nightly", StringComparison.Ordinal)
? TestFilterResult.Run : TestFilterResult.Drop;
}
Ga terug TestFilterResult.Run om de test uit te voeren, Drop om deze weg te laten zonder een resultaat of Skip(reason) om een overgeslagen resultaat te rapporteren. MSTest kan één filterexemplementatie gelijktijdig aanroepen, dus implementaties moeten thread-veilig zijn. Filters voor de opdrachtregel en in Test Explorer worden uitgevoerd vóór ITestFilter, terwijl [Ignore] pas daarna wordt geëvalueerd.
Vanaf MSTest 4.4 kunnen .NET projecten het algemene, typeveilige registratieformulier [assembly: TestFilterProvider<MyFilter>]gebruiken. De compiler dwingt vervolgens af dat MyFilter implementeert ITestFilter en een openbare parameterloze constructor heeft. Het algemene kenmerk is niet beschikbaar voor .NET Framework. Voor een project met meerdere doelen selecteert u het algemene of niet-algemene formulier met een preprocessorsymbool van het doelframework.
#if NET
[assembly: TestFilterProvider<MyFilter>]
#else
[assembly: TestFilterProvider(typeof(MyFilter))]
#endif
Vanaf MSTest 4.4 valideert de MSTEST0081 analyzer het niet-algemene registratieformulier volledig. Voor het algemene formulier worden nog steeds algemene filtertypen en assembly's gerapporteerd die meer dan één provider registreren.
TestRun.Current en geplande tests
Notitie
Geïntroduceerd in MSTest 4.3.0 (experimenteel).
De experimentele API (van RFC 014) bevat informatie over de huidige uitvoering, inclusief de set geplande TestRun.Current tests, zodat extensies en armaturen kunnen controleren wat er moet worden uitgevoerd.
Bekende beperkingen
De door NuGet geleverde MSBuild SDK's (inclusief MSTest.Sdk) hebben beperkte ondersteuning van tooling als het gaat om het bijwerken van hun versie, wat betekent dat de gebruikelijke NuGet-updates en de Visual Studio UI voor het beheren van NuGet-pakketten niet werkt zoals verwacht. Je moet de versie handmatig bijwerken in het bestand global.json en in het projectbestand. (Dit geldt zelfs als u Dependabot gebruikt vanwege problemen dependabot-core#12824 en dependabot-core#8615.)