Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Microsoft.Testing.Platform to lekka i przenośna alternatywa dla VSTest do uruchamiania testów w każdym kontekście, w tym w potokach ciągłej integracji (CI), wierszu poleceń, Eksploratorze testów w programie Visual Studio i Eksploratorze testów w programie VS Code. Platforma Microsoft.Testing.Platform jest osadzona bezpośrednio w projektach testowych i nie ma żadnych innych zależności aplikacji, takich jak vstest.console
lub dotnet test
potrzebne do uruchamiania testów.
Microsoft.Testing.Platform
jest open source. Kod Microsoft.Testing.Platform
można znaleźć w repozytorium microsoft/testfx GitHub.
Filarów Microsoft.Testing.Platform
Ta nowa platforma testowania jest oparta na środowisku zespołu testowania środowiska deweloperów platformy .NET i ma na celu rozwiązanie problemów napotykanych od czasu wydania platformy .NET Core w 2016 roku. Chociaż istnieje wysoki poziom zgodności między środowiskiem .NET Framework a platformą .NET Core/.NET, niektóre kluczowe funkcje, takie jak system wtyczek oraz nowe możliwe formy kompilacji w .NET, utrudniają rozwój lub pełne wsparcie nowych funkcji środowiska uruchomieniowego przy użyciu bieżącej architektury platformy VSTest.
Główne czynniki napędzane ewolucją nowej platformy testowej zostały szczegółowo opisane w następujących kwestiach:
deterministyczność: zapewnienie, że uruchamianie tych samych testów w różnych kontekstach (lokalnie, CI) spowoduje wygenerowanie tego samego wyniku. Nowe środowisko uruchomieniowe nie polega na odbiciu ani żadnej innej dynamicznej funkcji środowiska uruchomieniowego platformy .NET w celu koordynowania przebiegu testu.
Przezroczystość środowiska uruchomieniowego: Środowisko uruchomieniowe testów nie ingeruje w kod struktury testowej, nie tworzy izolowanych kontekstów, takich jak
AppDomain
lubAssemblyLoadContext
, i nie używa refleksji ani niestandardowych rozwiązywaczy zestawów.Rejestracja rozszerzeń w czasie kompilacji: rozszerzenia, takie jak struktury testowe i rozszerzenia poza procesem, są rejestrowane w czasie kompilacji w celu zapewnienia determinizmu i ułatwienia wykrywania niespójności.
zerowe zależności: rdzeniem platformy jest pojedynczy zestaw platformy .NET,
Microsoft.Testing.Platform.dll
, który nie ma zależności innych niż obsługiwane środowiska uruchomieniowe.Hostable: środowisko uruchomieniowe testów może być hostowane w dowolnej aplikacji platformy .NET. Aplikacja konsolowa jest często używana do uruchamiania testów, ale można utworzyć aplikację testową w dowolnym typie aplikacji .NET. Dzięki temu można uruchamiać testy w specjalnych kontekstach, takich jak urządzenia lub przeglądarki, w których mogą występować ograniczenia.
Obsługa wszystkich formatów platformy .NET: Obsługa bieżących i przyszłych formatów platformy .NET, w tym Native AOT.
Wydajność: Znalezienie właściwej równowagi między funkcjami a punktami rozszerzenia, aby uniknąć rozrastania środowiska uruchomieniowego przez kod, który nie jest podstawowy. Nowa platforma testowa została zaprojektowana tak, aby "orkiestrować" przebieg testu, a nie dostarczać szczegółów implementacji na temat tego, jak to zrobić.
wystarczająco rozszerzalne: nowa platforma jest oparta na punktach rozszerzalności, aby umożliwić maksymalne dostosowanie wykonywania środowiska uruchomieniowego. Umożliwia skonfigurowanie hosta procesu testowania, obserwowanie procesu testowego i pozyskiwanie informacji z frameworka testowego w procesie hosta testowego.
wdrożenie pojedynczego modułu: funkcja hostowania umożliwia model wdrażania pojedynczego modułu, w którym pojedynczy wynik kompilacji może służyć do obsługi wszystkich punktów rozszerzalności, zarówno poza procesem, jak i w procesie, bez konieczności dostarczania różnych modułów wykonywalnych.
Obsługiwane platformy testowe
- MSTest. W narzędziu MSTest obsługa
Microsoft.Testing.Platform
jest wykonywana za pośrednictwem modułu uruchamiającego MSTest. - NUnit. W NUnit obsługa
Microsoft.Testing.Platform
jest realizowana przez NUnit runner. - xUnit.net: W xUnit.net wsparcie
Microsoft.Testing.Platform
odbywa się za pośrednictwem uruchamiacza xUnit.net. - TUnit: całkowicie skonstruowany w oparciu o
Microsoft.Testing.Platform
, aby uzyskać więcej informacji, zobacz dokumentację TUnit .
Uruchamianie i debugowanie testów
Microsoft.Testing.Platform
projekty testowe są tworzone jako pliki wykonywalne, które można uruchamiać (lub debugować) bezpośrednio. Nie ma dodatkowej konsoli ani polecenia do uruchamiania testów. Aplikacja kończy działanie z kodem zakończenia bezzerowym, jeśli występuje błąd, który jest typowy dla większości plików wykonywalnych. Aby uzyskać więcej informacji na temat znanych kodów wyjścia, zobacz kody wyjścia Microsoft.Testing.Platform.
Napiwek
Możesz zignorować określony kod zakończenia przy użyciu opcji wiersza polecenia --ignore-exit-code
.
Można również ustawić opcje wiersza polecenia, które mają zastosowanie do określonego projektu testowego w pliku projektu przy użyciu właściwości TestingPlatformCommandLineArguments
MSBuild. Jednym z typowych przypadków użycia są projekty testowe, w których wszystkie testy są ignorowane, które zwykle kończą się kodem wyjścia 8 (sesja testowa nie uruchomiła żadnych testów). W tym scenariuszu możesz dodać następujący tekst pod sekcję PropertyGroup
w pliku projektu:
<TestingPlatformCommandLineArguments>$(TestingPlatformCommandLineArguments) --ignore-exit-code 8</TestingPlatformCommandLineArguments>
Ważny
Domyślnie Microsoft.Testing.Platform
zbiera dane telemetryczne. Aby uzyskać więcej informacji i opcji rezygnacji, zobacz telemetrię Microsoft.Testing.Platform.
Publikowanie projektu testowego przy użyciu dotnet publish
i bezpośrednie uruchamianie aplikacji jest innym sposobem uruchamiania testów. Na przykład wykonanie ./Contoso.MyTests.exe
. W niektórych scenariuszach można również użyć dotnet build
do utworzenia pliku wykonywalnego, ale mogą wystąpić przypadki brzegowe, takie jak natywny AOT.
Korzystanie z dotnet run
Polecenie dotnet run
może służyć do kompilowania i uruchamiania projektu testowego. Jest to najprostszy, choć czasami najwolniejszy sposób uruchamiania testów. Korzystanie z dotnet run
jest praktyczne podczas edytowania i uruchamiania testów lokalnie, ponieważ gwarantuje, że projekt testowy zostanie ponownie skompilowany w razie potrzeby.
dotnet run
również automatycznie znajdzie projekt w bieżącym folderze.
dotnet run --project Contoso.MyTests
Aby uzyskać więcej informacji na temat dotnet run
, zobacz dotnet run.
Korzystanie z dotnet exec
Polecenie dotnet exec
lub dotnet
służy do wykonywania (lub uruchamiania) już skompilowany projekt testowy. Jest to alternatywa dla bezpośredniego uruchamiania aplikacji.
dotnet exec
wymaga ścieżki do skompilowanej biblioteki dll projektu testowego.
dotnet exec Contoso.MyTests.dll
lub
dotnet Contoso.MyTests.dll
Notatka
Podanie ścieżki do pliku wykonywalnego projektu testowego (*.exe) powoduje błąd:
Error:
An assembly specified in the application dependencies manifest
(Contoso.MyTests.deps.json) has already been found but with a different
file extension:
package: 'Contoso.MyTests', version: '1.0.0'
path: 'Contoso.MyTests.dll'
previously found assembly: 'S:\t\Contoso.MyTests\bin\Debug\net8.0\Contoso.MyTests.exe'
Aby uzyskać więcej informacji na temat dotnet exec
, zajrzyj do dotnet exec.
Korzystanie z dotnet test
Microsoft.Testing.Platform
oferuje warstwę zgodności z vstest.console.exe
i dotnet test
, dzięki czemu można uruchamiać testy tak jak wcześniej podczas włączania nowego scenariusza wykonywania.
dotnet test Contoso.MyTests.dll
Opcje
Poniższa lista zawiera tylko opcje platformy. Aby wyświetlić określone opcje wprowadzone przez każde rozszerzenie, zapoznaj się ze stroną dokumentacji rozszerzenia lub użyj opcji --help
.
@
Określa nazwę pliku odpowiedzi. Nazwa pliku odpowiedzi musi natychmiast podążać za znakiem @ bez odstępu między znakiem @ a nazwą pliku odpowiedzi.
Opcje w pliku odpowiedzi są interpretowane tak, jakby były obecne w tym miejscu w wierszu polecenia. Każdy argument w pliku odpowiedzi musi rozpoczynać się i kończyć w tym samym wierszu. Nie można używać znaku ukośnika odwrotnego () do łączenia wierszy. Użycie pliku odpowiedzi pomaga w przypadku bardzo długich poleceń, które mogą przekroczyć limity terminalu. Plik odpowiedzi można połączyć z wbudowanymi argumentami wiersza polecenia. Na przykład:
./TestExecutable.exe @"filter.rsp" --timeout 10s
gdzie filter.rsp może zawierać następującą zawartość:
--filter "A very long filter"
Można też użyć pojedynczego pliku rsp do określenia limitu czasu i filtru w następujący sposób:
./TestExecutable.exe @"arguments.rsp"
--filter "A very long filter" --timeout 10s
--config-file
Określa plik testconfig.json.
--diagnostic
Włącza rejestrowanie diagnostyczne. Domyślny poziom logowania to
Trace
. Plik jest zapisywany w katalogu wyjściowym z następującym formatem nazwy,log_[MMddHHssfff].diag
.--diagnostic-filelogger-synchronouswrite
Wymusza synchroniczne zapisywanie logów przez wbudowany rejestrator plików. Przydatne w scenariuszach, w których nie chcesz utracić żadnych wpisów dziennika (jeśli proces ulegnie awarii). Spowoduje to spowolnienie wykonywania testu.
--diagnostic-output-directory
Katalog wyjściowy rejestrowania diagnostycznego, jeśli nie został określony, plik jest generowany w domyślnym katalogu TestResults.
--diagnostic-output-fileprefix
Prefiks nazwy pliku dziennika. Wartość domyślna to
"log_"
.--diagnostic-verbosity
Definiuje poziom szczegółowości, gdy używany jest przełącznik
--diagnostic
. Dostępne wartości toTrace
,Debug
,Information
,Warning
,Error
lubCritical
.--exit-on-process-exit
Zakończ proces testowy, jeśli proces zależny zakończy działanie. Należy podać piD.
--help
Wyświetla opis sposobu używania polecenia .
--ignore-exit-code
Zezwala na ignorowanie niektórych kodów zakończenia innych niż zero, i zamiast tego są zwracane jako
0
. Aby uzyskać więcej informacji, sprawdź Ignoruj określone kody zakończenia.--info
Wyświetla zaawansowane informacje o aplikacji testowej .NET, takie jak:
- Platforma.
- Środowisko.
- Każdy zarejestrowany dostawca wiersza polecenia, taki jak np.
name
,version
,description
ioptions
. - Każde zarejestrowane narzędzie, takie jak jego
command
,name
,version
,description
, i wszyscy dostawcy wiersza polecenia.
Ta funkcja służy do zrozumienia rozszerzeń, które będą rejestrować tę samą opcję wiersza polecenia lub zmiany dostępnych opcji między wieloma wersjami rozszerzenia (lub platformy).
--list-tests
Wyświetl listę dostępnych testów. Testy nie zostaną wykonane.
--maximum-failed-tests
Określa maksymalną liczbę niepowodzeń testów, które po osiągnięciu zatrzymają przebieg testu. Obsługa tego przełącznika wymaga od autorów platform zaimplementowania możliwości
IGracefulStopTestExecutionCapability
. Kod zakończenia po osiągnięciu tej liczby niepowodzeń testów wynosi 13. Aby uzyskać więcej informacji, zobacz Microsoft.Testing.Platform kody wyjścia.Notatka
Ta funkcja jest dostępna w witrynie Microsoft.Testing.Platform, począwszy od wersji 1.5.
--minimum-expected-tests
Określa minimalną liczbę testów, które mają zostać uruchomione. Domyślnie oczekuje się, że co najmniej jeden test zostanie uruchomiony.
--results-directory
Katalog, w którym zostaną umieszczone wyniki testu. Jeśli określony katalog nie istnieje, zostanie utworzony. Wartość domyślna to
TestResults
w katalogu zawierającym aplikację testową.--timeout
Globalny limit czasu wykonywania testów. Przyjmuje jeden argument jako ciąg w formacie
<value>[h|m|s]
, gdzie<value>
jest liczbą zmiennoprzecinkową.
Integracja z programem MSBuild
Pakiet NuGet Microsoft.Testing.Platform.MSBuild udostępnia różne integracje Microsoft.Testing.Platform
z programem MSBuild:
- Obsługa
dotnet test
. Aby uzyskać więcej informacji, zobacz Testowanie za pomocą testu dotnet. - Obsługa
ProjectCapability
wymagana przez Eksploratory TestówVisual Studio
iVisual Studio Code
. - Automatyczne generowanie punktu wejścia (metoda
Main
). - Automatyczne generowanie pliku konfiguracji.
Notatka
Ta integracja działa w sposób przechodniy (projekt odwołujący się do innego projektu odwołującego się do tego pakietu będzie zachowywał się tak, jakby odwołuje się do pakietu) i można go wyłączyć za pośrednictwem właściwości IsTestingPlatformApplication
MSBuild.