Übersicht über das MSTest-SDK
Das in .NET 9 eingeführte MSTest.Sdk ist ein MSBuild-Projekt-SDK zum Erstellen von MSTest-Apps. Es ist möglich, eine MSTest-App ohne dieses SDK zu erstellen, für das MSTest SDK gilt jedoch Folgendes:
- Es wurde dafür konzipiert, eine erstklassige Erfahrung für Tests mit MSTest zu bieten.
- Es ist das empfohlene Ziel für die meisten Benutzer.
- Einfach zu konfigurieren für andere Benutzer
Das MSTest-SDK ermittelt Ihre Tests mithilfe des MSTest-Runners und führt sie aus.
Sie können MSTest.Sdk
in einem Projekt aktivieren, indem Sie einfach das Sdk
-Attribut des Project
-Knotens Ihres Projekts aktualisieren:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Hinweis
/3.3.1
wird als Beispiel verwendet, da es die erste Version des SDK ist, kann jedoch durch jede neuere Version ersetzt werden.
Um die Behandlung von Versionen zu vereinfachen, wird empfohlen, die SDK-Version mithilfe der Datei global.json auf der Lösungsebene festzulegen. Ihre Projektdatei würde z. B. wie folgt aussehen:
<Project Sdk="MSTest.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Geben Sie dann die MSTest.Sdk
-Version in der Datei global.json wie folgt an:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.3.1"
}
}
Weitere Informationen finden Sie unter Verwenden von MSBuild-Projekt-SDKs.
Wenn Sie build
für das Projekt ausführen, werden alle erforderlichen Komponenten wiederhergestellt und mithilfe des standardmäßigen NuGet-Workflows installiert, der von Ihrem Projekt festgelegt wurde.
Sie benötigen nichts anderes, um Ihre Tests zu erstellen und auszuführen, und Sie können dasselbe Tool (z. B. dotnet test
oder Visual Studio) verwenden, das von einem klassischen MSTest-Projekt verwendet wird.
Wichtig
Durch den Wechsel zum MSTest.Sdk
entscheiden Sie sich für die Verwendung des MSTest-Runners, einschließlich dotnet test. Dies erfordert, dass Sie Ihre CI (Continuous Integration)- und lokalen CLI-Aufrufe (Command Line Interface, Befehlszeilenschnittelle) ändern, und wirkt sich auch auf die verfügbaren Einträge der .runsettings aus. Sie können MSTest.Sdk
verwenden und weiterhin die alten Integrationen und Tools beibehalten, indem Sie stattdessen den Runner wechseln.
Auswählen des Runner
Standardmäßig basiert das MSTest SDK auf dem MSTest-Runner, Sie können jedoch zu VSTest wechseln, indem Sie die <UseVSTest>true</UseVSTest>
-Eigenschaft hinzufügen.
Erweitern von MSTest Runner
Sie können die MSTest runner
-Oberfläche über eine Reihe von NuGet-Paketerweiterungen anpassen. Um diese Erfahrung zu vereinfachen und zu verbessern, führt das MSTest SDK zwei Features ein:
MSTest-Runner-Profil
Mit Profilen können Sie die Standardkonfigurationen und -erweiterungen auswählen, die auf Ihr Testprojekt angewendet werden.
Sie können das Profil mithilfe der Eigenschaft TestingExtensionsProfile
auf eines der folgenden drei Profile festlegen:
Default
– Aktiviert die empfohlenen Erweiterungen für diese Version von MSTest.SDK. Dies ist die Standardeinstellung, wenn die Eigenschaft nicht explizit festgelegt wird.None
– Es sind keine Erweiterungen aktiviert.AllMicrosoft
– Aktiviert alle von Microsoft bereitgestellten Erweiterungen (einschließlich der Erweiterungen mit einer restriktiven Lizenz).
Hier ist ein vollständiges Beispiel für die Verwendung des None
-Profils:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Aktivieren oder Deaktivieren von Erweiterungen
Erweiterungen können durch MSBuild-Eigenschaften mit dem Muster Enable[NugetPackageNameWithoutDots]
aktiviert und deaktiviert werden.
Verwenden Sie beispielsweise die folgende auf true
festgelegte Eigenschaft EnableMicrosoftTestingExtensionsCrashDump
, um die Absturzabbilderweiterung (NuGet-Paket Microsoft.Testing.Extensions.CrashDump) zu aktivieren:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Eine Liste aller verfügbaren Erweiterungen finden Sie unter Microsoft.Testing.Platform-Erweiterungen.
Warnung
Überprüfen Sie unbedingt die Lizenzbedingungen für jede Erweiterung, da diese variieren können.
Aktivierte und deaktivierte Erweiterungen werden mit den Erweiterungen kombiniert, die von Ihrem ausgewählten Erweiterungsprofil bereitgestellt werden.
Dieses Eigenschaftsmuster kann verwendet werden, um zusätzlich zum impliziten Default
-Profil eine zusätzliche Erweiterung zu aktivieren (wie im vorherigen CrashDumpExtension-Beispiel gezeigt).
Sie können Erweiterungen aus dem ausgewählten Profil auch deaktivieren. Deaktivieren Sie z. B. die MS Code Coverage
-Erweiterung, indem Sie <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
festlegen:
<Project Sdk="MSTest.Sdk/3.3.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Features
Neben der Auswahl des Runners und der Runner-spezifischen Erweiterungen bietet MSTest.Sdk
zusätzliche Funktionen zum Vereinfachen und Verbessern Ihrer Testerfahrung.
Testen mit .NET Aspire
.NET Aspire ist ein dogmatischer, cloudfähiger Stapel zum Erstellen von beobachtbaren, produktionsbereiten, verteilten Anwendungen. .NET Aspire wird über eine Sammlung von NuGet-Paketen bereitgestellt, die bestimmte cloudnative Bedenken behandeln. Weitere Informationen finden Sie in der .NET Aspire-Dokumentation.
Hinweis
Dieses Feature ist unter MSTest.Sdk 3.4.0 verfügbar.
Indem Sie die EnableAspireTesting
-Eigenschaft auf true
festlegen, können Sie alle Abhängigkeiten und using
-Standardanweisungen, die Sie zum Testen mit Aspire
und MSTest
benötigen, bereitstellen.
<Project Sdk="MSTest.Sdk/3.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableAspireTesting>true</EnableAspireTesting>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Testen mit Playwright
Playwright ermöglicht zuverlässige End-to-End-Tests für moderne Web-Apps. Weitere Informationen finden Sie in der offiziellen Playwright-Dokumentation.
Hinweis
Dieses Feature ist unter MSTest.Sdk 3.4.0 verfügbar.
Indem Sie die EnablePlaywright
-Eigenschaft auf true
festlegen, können Sie alle Abhängigkeiten und using
-Standardanweisungen, die Sie zum Testen mit Playwright
und MSTest
benötigen, bereitstellen.
<Project Sdk="MSTest.Sdk/3.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnablePlaywright>true</EnablePlaywright>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Migrieren zum MSTest SDK
Beachten Sie die folgenden Schritte, die zum Migrieren zum MSTest-SDK erforderlich sind.
Aktualisieren des Projekts
Wenn Sie ein vorhandenes MSTest-Testprojekt zu MSTest SDK migrieren, ersetzen Sie zunächst den Sdk="Microsoft.NET.Sdk"
-Eintrag oben im Testprojekt durch Sdk="MSTest.Sdk"
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"
Fügen Sie die Version zu global.json
hinzu:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.3.1"
}
}
Sie können dann mit der Vereinfachung Ihres Projekts beginnen.
Entfernen Sie Standardeigenschaften:
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>
Entfernen Sie Standardpaketverweise:
- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"
Schließlich können Sie basierend auf dem verwendeten Erweiterungsprofil auch einige der Microsoft.Testing.Extensions.*
-Pakete entfernen.
Aktualisieren Ihrer CI
Nachdem Sie Ihre Projekte aktualisiert haben, müssen Sie Ihre CI-Konfiguration aktualisieren, sofern Sie MSTest runner
(Standard) verwenden und dotnet test
zum Ausführen Ihrer Tests benötigen. Weitere Informationen und Hinweise zum Verständnis aller erforderlichen Änderungen finden Sie unter Integration von „dotnet test”.
Hier sehen Sie ein Beispielupdate beim Verwenden der DotNetCoreCLI
-Aufgabe in Azure DevOps:
\- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/**.sln'
- arguments: '--configuration Release'
+ arguments: '--configuration Release -p:TestingPlatformCommandLineArguments="--report-trx --results-directory $(Agent.TempDirectory) --coverage"'