Omówienie narzędzia MSTest

MSTest, Microsoft Testing Framework, to w pełni obsługiwana platforma testowa typu open source i międzyplatformowa dla aplikacji platformy .NET. Umożliwia pisanie i wykonywanie testów oraz oferuje zestawy testów z możliwością integracji z eksploratorami testów Visual Studio i Visual Studio Code, .NET CLI oraz wieloma potokami CI.

Narzędzie MSTest jest hostowane w usłudze GitHub i współpracuje ze wszystkimi obsługiwanymi obiektami docelowymi platformy .NET.

Kluczowe funkcje

Narzędzie MSTest zapewnia kompleksowe możliwości testowania:

  • Testowanie oparte na danych: Uruchamianie testów z użyciem wielu danych wejściowych przy użyciu DataRow, CombinatorialData, DynamicData oraz zewnętrznych źródeł danych.
  • Zarządzanie cyklem życia testu: konfigurowanie i czyszczenie na poziomach zestawów, klas i testów.
  • Wykonywanie równoległe: równoczesne uruchamianie testów w celu skrócenia czasu wykonywania.
  • Organizacja testowa: kategoryzowanie, określanie priorytetów i filtrowanie testów przy użyciu atrybutów metadanych.
  • Analizatory kodu: wykrywanie typowych problemów i wymuszanie najlepszych rozwiązań w czasie kompilacji.
  • Asercji: kompleksowe metody asercji do sprawdzania poprawności wyników.

Obsługiwane platformy

Platforma MSTest obsługuje szeroką gamę platform .NET i platform docelowych. W poniższej tabeli przedstawiono podsumowanie obsługi platformy i szczególnych zagadnień:

Platforma Platformy docelowe Obsługa wątków Atrybuty specjalne Notatki
.NET .NET 8+ Pełna paralelizacja Wszystkie atrybuty Zalecane w przypadku nowych projektów
.NET Framework 4.6.2+ Pełna paralelizacja Wszystkie atrybuty Pełna obsługa funkcji
Platforma UWP UAP 10, .NET 10+ za pomocą narzędzi platformy UWP wątek interfejsu użytkownika UITestMethod MSTest 4.5 i MTP 2.5 obsługują klasyczne i nowoczesne aplikacje UWP za pomocą pakietu towarzyszącego app-model MSTest.Sdk
WinUI 3 .NET 8+ wątek interfejsu użytkownika UITestMethod MTP obsługuje hosty pakietowe, niepakietowe i AppContainer; zobacz Testowanie aplikacji UWP i WinUI 3 za pomocą MSTest i MTP
automatyzacja interfejsu użytkownika pulpitu Windows Docelowy system Windows dla platformy .NET 8+ STA STATestClass Program MSTest 4.5 w wersji zapoznawczej może uruchamiać rozpakowane aplikacje Win32, Windows Forms i WPF oraz uwidaczniać okno za pośrednictwem Windows automatyzacja interfejsu użytkownika
Natywna AOT .NET 8+ Pełna paralelizacja Większość atrybutów Ograniczony zestaw funkcji; zobacz Przykład natywnej usługi AOT
Przeglądarka WebAssembly .NET 10+ host niestandardowy Jednowątkowy Limited Obsługa wykonywania MTP jest dostępna od wersji MSTest 4.4
WASI WebAssembly .NET 10+ host niestandardowy Jednowątkowy Limited Obsługa wykonywania MTP jest dostępna od wersji MSTest 4.4

Uwagi dotyczące konkretnych platform

Testowanie platformy UWP

Testy platformy UWP są uruchamiane w kontenerze aplikacji platformy UWP i wymagają wątku interfejsu użytkownika dla wielu operacji:

[TestClass]
public class UwpTests
{
    [UITestMethod]
    public void TestUwpControl()
    {
        // Test runs on UI thread
        var button = new Button();
        Assert.IsNotNull(button);
    }
}

Począwszy od MSTest 4.5 i MTP 2.5, użyj pakietu MSTest.Sdk do uruchamiania klasycznych testów UWP i nowoczesnych testów .NET UWP przy użyciu MTP. Przyczepka o pełnym zaufaniu rejestruje i aktywuje pakiet, autoryzuje dokładny identyfikator SID pakietu aplikacji na potrzeby komunikacji MTP i kopiuje artefakty wynikowe z magazynu pakietów.

Nowoczesny UWP wymaga platformy .NET 10, UseUwp, i łańcucha narzędzi do kompilacji UWP programu Visual Studio. Klasyczny UWP zachowuje swoją dotychczasową uap10.0 strukturę projektu. Pełne konfiguracje można znaleźć w przykładzie nowoczesnej platformy UWP i klasycznym przykładzie platformy UWP.

Testowanie winUI 3

Testy WinUI 3 wymagają również dostępu do wątku UI do testowania komponentów wizualnych.

[TestClass]
public class WinUITests
{
    [UITestMethod]
    public void TestWinUIControl()
    {
        // Test runs on UI thread
        var window = new MainWindow();
        Assert.IsNotNull(window);
    }
}

MTP obsługuje pakietowane aplikacje testowe WinUI 3 z pełnym zaufaniem, niepakietowane aplikacje testowe WinUI 3 oraz aplikacje testowe WinUI 3 skonfigurowane do użycia z AppContainer. MSTest.Sdk uruchamia aplikacje bez pakietu bezpośrednio i używa pomocniczego składnika modelu aplikacji do rejestrowania i aktywacji aplikacji pakietowanych.

Obsługa aplikacji AppContainer wymaga bibliotek MSTest 4.5 i MTP 2.5 lub nowszej. Program VSTest nie obsługuje rozpakowanego pakietu WinUI 3. Aby uzyskać szczegółowe informacje na temat konfiguracji, zobacz Testowanie aplikacji platformy UWP i WinUI 3 przy użyciu bibliotek MSTest i MTP.

automatyzacja interfejsu użytkownika pulpitu Windows

Pakiet MSTest.Windows.UIAutomation integruje zarządzanie cyklem życia MSTest z Windows automatyzacja interfejsu użytkownika dla rozpakowanych aplikacji Win32, Windows Forms i WPF. Informacje na temat konfiguracji, ograniczeń oraz klas bazowych ApplicationTest i WindowTest można znaleźć w artykule Testowanie klasycznych aplikacji systemu Windows za pomocą automatyzacji interfejsu użytkownika MSTest.

Natywne AOT

Natywna kompilacja AOT jest obsługiwana z pewnymi ograniczeniami ze względu na ograniczone możliwości odbicia. Użyj generatorów źródeł, jeśli to możliwe, i przetestuj scenariusze AOT za pomocą przykładu NativeAotRunner.

Przeglądarka i zestaw WEBAssembly WASI

Platforma MSTest 4.4 obsługuje niestandardowe hosty .NET 10 lub WASI WebAssembly. Aby uruchomić testy z przywołytowanego zestawu MSTest, wywołaj metodę AddMSTest. W projekcie hosta ustaw EnableMSTestRunner na true, a GenerateTestingPlatformEntryPoint na false. Utrzymuj zgodność wersji pakietów MSTest i MTP.

W jednowątkowym środowisku uruchomieniowym WebAssembly MSTest nie może wymusić przerwania testu, który przekroczył limit czasu. Tryb oczekiwania debugera nie jest obsługiwany w przeglądarce ani w WASI, a przeglądarka nie obsługuje opcji uruchomienia debugera.

MTP może strumieniować dane TRX oraz zgłaszać artefakty plików testowych i sesji za pośrednictwem wirtualnego systemu plików WebAssembly hosta i kanału artefaktów. Azure DevOps publikowanie działa tylko wtedy, gdy host zapewnia obsługiwany dostęp HTTP i wymagane uwierzytelnianie potoku. Te funkcje nie udzielają nieograniczonego dostępu do systemu plików hosta ani dostępu sieciowego.

Aby zobaczyć kompletny host przeglądarki, zobacz przykład BrowserPlayground.

Obsługa wątkowania STA

W przypadku scenariuszy współpracy międzyoperacyjnej Windows COM, narzędzie MSTest udostępnia atrybuty STATestClass i STATestMethod do uruchamiania testów w jednowątkowym apartamencie. Aby uzyskać szczegółowe informacje na temat wątkowania STA, w tym obsługi kontynuacji asynchronicznych w programie UseSTASynchronizationContext, zobacz Atrybuty wątkowe.

Uruchamiacze testów

Narzędzie MSTest obsługuje dwie platformy wykonywania testów:

  • Microsoft.Testing.Platform (MTP): nowoczesna, zalecana platforma testowa o lepszej wydajności i rozszerzalności.
  • VSTest: oryginalna i domyślna platforma testowa dla platformy .NET.

W przypadku nowych projektów zalecamy używanie protokołu MTP z zestawem MSTest.Sdk.

Zasady pomocy technicznej MSTest

Od wersji 3.0.0, narzędzie MSTest ściśle przestrzega wersjonowania semantycznego.

Zespół MSTest obsługuje tylko najnowszą wydaną wersję i zdecydowanie zachęca użytkowników do zawsze aktualizowania do najnowszej wersji, aby korzystać z ulepszeń i poprawek zabezpieczeń. Wersje zapoznawcza nie są obsługiwane przez firmę Microsoft, ale są oferowane do testowania publicznego przed ostateczną wersją.

Historia wersji

MSTest przeszedł znaczącą ewolucję w wersjach głównych.

  • MSTest v1: oryginalna struktura testowania programu Visual Studio
  • MSTest v2: pierwsza wersja typu open source z obsługą wielu platform
  • MSTest w wersji 3: nowoczesne ponowne zapisywanie z ulepszoną architekturą i funkcjami
  • MSTest v4: bieżąca wersja z rozszerzonymi funkcjami

Note

Program MSTest 4.5 jest rozwijany od października 2026 r. Funkcje oznaczone jako wprowadzone w programie MSTest 4.5 wymagają kompilacji w wersji zapoznawczej do momentu wydania wersji 4.5.0.

Aby uzyskać szczegółowe informacje na temat wszystkich wydań, zobacz dziennik zmian MSTest.

Jeśli uaktualniasz starszą wersję, zapoznaj się z przewodnikami migracji:

Zmiany przełomowe

Zespół MSTest dokładnie sprawdza i minimalizuje zmiany powodujące niekompatybilność. Kiedy konieczne są zmiany łamiące kompatybilność, zespół używa anonsów w serwisie GitHub i etykiet zmian powodujących niezgodność w problemach, aby wcześnie poinformować społeczność, dając użytkownikom czas na przekazanie opinii i zgłaszanie obaw przed opublikowaniem zmian.

Dalsze kroki