Omówienie zestawu MSTest SDK
MSTest.Sdk to zestaw SDK projektu MSBuild do tworzenia aplikacji MSTest. Można utworzyć aplikację MSTest bez tego zestawu SDK, jednak zestaw MSTest SDK to:
- Dostosowane do zapewnienia wyjątkowego doświadczenia testowania za pomocą MSTest.
- Zalecany cel dla większości użytkowników.
- Łatwe konfigurowanie dla innych użytkowników.
SDK dla MSTest odkrywa i uruchamia testy przy użyciu runnera MSTest.
Możesz włączyć MSTest.Sdk
w projekcie, po prostu aktualizując atrybut Sdk
w węźle Project
projektu:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Uwaga
/3.6.3
jest podany jako przykład i można go zastąpić dowolną nowszą wersją.
Aby uprościć obsługę wersji, zalecamy ustawienie wersji zestawu SDK na poziomie rozwiązania przy użyciu pliku global.json . Na przykład plik projektu wygląda następująco:
<Project Sdk="MSTest.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Następnie określ wersję w pliku global.json w następujący sposób:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.6.3"
}
}
Aby uzyskać więcej informacji, zobacz Use MSBuild project SDK (Używanie zestawów SDK projektu MSBuild).
build
W przypadku projektu wszystkie potrzebne składniki są przywracane i instalowane przy użyciu standardowego przepływu pracy NuGet ustawionego przez projekt.
Nie potrzebujesz niczego innego, aby skompilować i uruchomić testy. Możesz użyć tego samego narzędzia (na przykład dotnet test
lub programu Visual Studio) używanego przez "klasyczny" projekt MSTest.
Ważne
Przełączając się na MSTest.Sdk
, wybierasz użycie uruchamiacza MSTest, w tym także przy użyciu dotnet test. To wymaga zmodyfikowania wywołań CI i lokalnego CLI, a także wpływa na dostępne wpisy w .runsettings. Możesz użyć MSTest.Sdk
i nadal zachować stare integracje i narzędzia, przełączając uruchamiacz.
Wybierz biegacza
Domyślnie zestaw MSTest SDK korzysta z uruchamiacza MSTest, ale możesz przełączyć się na narzędzie VSTest, dodając właściwość <UseVSTest>true</UseVSTest>
.
Rozszerzanie modułu uruchamiającego MSTest
Możesz dostosować MSTest runner
środowisko za pomocą zestawu rozszerzeń pakietów NuGet. Aby uprościć i ulepszyć to środowisko, zestaw MSTest SDK wprowadza dwie funkcje:
Profil modułu uruchamiającego MSTest
Koncepcja profilów umożliwia wybranie domyślnego zestawu konfiguracji i rozszerzeń, które zostaną zastosowane do projektu testowego.
Profil można ustawić przy użyciu właściwości TestingExtensionsProfile
z jednym z następujących trzech profilów:
None
— Nie włączono rozszerzeń.Default
— włącza zalecane rozszerzenia dla tej wersji zestawu MSTest.SDK. Jest to ustawienie domyślne, gdy właściwość nie jest ustawiana jawnie.Włącza następujące rozszerzenia:
AllMicrosoft
— Włącz wszystkie rozszerzenia dostarczane przez firmę Microsoft (w tym rozszerzenia z restrykcyjną licencją).Włącza następujące rozszerzenia:
Fakes (MSTest.Sdk 3.7.0+)
Oto pełny przykład użycia profilu None
:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TestingExtensionsProfile>None</TestingExtensionsProfile>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Rozszerzenie/profil | Żaden | Domyślny | WszystkieMicrosoft |
---|---|---|---|
pokrycie kodu | ✔️ | ✔️ | |
zrzut pamięci | ✔️ | ||
Fałszywki | ✔️ (MSTest.Sdk 3.7.0+) | ||
zrzut pamięci podczas zawieszenia | ✔️ | ||
Hot Reload | ✔️ | ||
ponów próbę | ✔️ | ||
Trx | ✔️ | ✔️ |
Włączanie lub wyłączanie rozszerzeń
Rozszerzenia można włączać i wyłączać przez właściwości programu MSBuild za pomocą wzorca Enable[NugetPackageNameWithoutDots]
.
Aby na przykład włączyć rozszerzenie zrzutu awaryjnego (pakiet NuGet Microsoft.Testing.Extensions.CrashDump), możesz użyć następującej właściwości EnableMicrosoftTestingExtensionsCrashDump
ustawionej na :true
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Aby uzyskać listę wszystkich dostępnych rozszerzeń, zobacz Microsoft.Testing.Platform extensions (Rozszerzenia Microsoft.Testing.Platform).
Ostrzeżenie
Ważne jest, aby przejrzeć postanowienia licencyjne dla każdego rozszerzenia, ponieważ mogą się one różnić.
Rozszerzenia włączone i wyłączone są łączone z rozszerzeniami dostarczonymi przez wybrany profil rozszerzenia.
Ten wzorzec właściwości może służyć do włączenia dodatkowego rozszerzenia na bazie niejawnego Default
profilu (jak pokazano w poprzednim przykładzie rozszerzenia CrashDumpExtension).
Możesz również wyłączyć rozszerzenie pochodzące z wybranego profilu. Na przykład wyłącz MS Code Coverage
rozszerzenie, ustawiając wartość <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
:
<Project Sdk="MSTest.Sdk/3.6.3">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Funkcje
Poza wyborem modułu uruchamiającego oraz specyficznych dla niego rozszerzeń, MSTest.Sdk
oferuje również dodatkowe funkcje upraszczające i ulepszające Twoje środowisko testowe.
Testowanie za pomocą platformy .NET Aspire
Platforma .NET Aspire jest zestawem technologicznym o określonych zasadach, przygotowanym do pracy w chmurze, do tworzenia obserwowalnych, przygotowanych do wdrożenia produkcyjnego aplikacji rozproszonych. Platforma .NET Aspire jest dostarczana za pośrednictwem kolekcji pakietów NuGet, które obsługują konkretne problemy natywne dla chmury. Aby uzyskać więcej informacji, zobacz dokumentację platformy .NET Aspire.
Uwaga
Ta funkcja jest dostępna w zestawie MSTest.Sdk 3.4.0
Ustawiając właściwość EnableAspireTesting
na true
, można wprowadzić wszystkie zależności i domyślne dyrektywy using
potrzebne do testowania wraz z Aspire
i MSTest
.
<Project Sdk="MSTest.Sdk/3.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableAspireTesting>true</EnableAspireTesting>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Testowanie z Playwright
Playwright umożliwia niezawodne kompleksowe testowanie nowoczesnych aplikacji internetowych. Aby uzyskać więcej informacji, zobacz oficjalną dokumentację dramaturga.
Uwaga
Ta funkcja jest dostępna w zestawie MSTest.Sdk 3.4.0
Ustawiając właściwość EnablePlaywright
na true
, możesz wprowadzić wszystkie zależności i domyślne dyrektywy potrzebne do testowania za pomocą Playwright
i MSTest
.
<Project Sdk="MSTest.Sdk/3.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnablePlaywright>true</EnablePlaywright>
</PropertyGroup>
<!-- references to the code to test -->
</Project>
Migrowanie do zestawu MSTest SDK
Rozważ następujące kroki, które są wymagane do przeprowadzenia migracji do zestawu MSTest SDK.
Aktualizowanie projektu
Podczas migrowania istniejącego projektu testowego MSTest do zestawu MSTest SDK zacznij od zastąpienia Sdk="Microsoft.NET.Sdk"
wpisu w górnej części projektu testowego ciągiem Sdk="MSTest.Sdk"
- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"
Dodaj wersję do pliku global.json
:
{
"msbuild-sdks": {
"MSTest.Sdk": "3.6.3"
}
}
Następnie możesz zacząć upraszczać projekt.
Usuń właściwości domyślne:
- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>
Usuń odwołania do pakietów domyślnych:
- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"
Na koniec na podstawie używanego profilu rozszerzeń możesz również usunąć niektóre pakiety Microsoft.Testing.Extensions.*
.
Zaktualizuj swoją ciągłą integrację
Po zaktualizowaniu projektów, jeśli używasz MSTest runner
(ustawienie domyślne) i polegasz na dotnet test
do uruchamiania swoich testów, musisz zaktualizować konfigurację ciągłej integracji. Aby uzyskać więcej informacji i poznać wszystkie wymagane zmiany, zobacz sekcję dotnet test integration.
Oto przykładowa aktualizacja podczas używania zadania DotNetCoreCLI
w usłudze 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"'
Znane ograniczenia
Zestawy SDK MSBuild dostarczone przez NuGet (w tym MSTest.Sdk) mają ograniczoną obsługę narzędzi przy aktualizacji jego wersji, co oznacza, że zwykła aktualizacja NuGet i interfejs użytkownika programu Visual Studio do zarządzania pakietami NuGet nie działają tak, jak oczekiwano. Aby uzyskać więcej informacji, zobacz tę kwestię: NuGet#13127.
Uwaga
To ograniczenie nie jest specyficzne dla zestawu MSTest SDK, ale dla zestawu SDK MSBuild dostarczonego przez pakiet NuGet.
Dependabot będzie obsługiwać aktualizowanie wersji w pliku global.json
, ale należy ręcznie zaktualizować wersję w pliku projektu.