Udostępnij za pośrednictwem


Testowanie za pomocą polecenia "dotnet test"

Ten artykuł zawiera szczegółowe informacje na temat polecenia interfejsu wiersza polecenia dotnet test, w tym jego zgodność wsteczna z VSTest i Microsoft.Testing.Platform (MTP).

Polecenie dotnet test działa w dwóch trybach podstawowych:

  • VSTest tryb: jest to tryb domyślny dla dotnet test i był jedynym trybem dostępnym przed zestawem SDK .NET 10. Jest ona przeznaczona głównie do VSTest, ale może być również używana do uruchamiania testów Microsoft.Testing.Platform za pomocą pakietu NuGet Microsoft.Testing.Platform.MSBuild.
  • Microsoft. Testing.Platform tryb: Wprowadzony z zestawem SDK .NET 10, ten tryb obsługuje wyłącznie aplikacje testowe utworzone przy użyciu Microsoft. Testing.Platform.

Wskazówka

Aby uzyskać informacje o CLI, zobacz dotnet test.

Tryb VSTest dla dotnet test

Przez długi czas vsTest był jedyną platformą testową w .NET. W związku z tym dotnet test został zaprojektowany wyłącznie na potrzeby programu VSTest, z wszystkimi opcjami wiersza polecenia dostosowanymi do narzędzia VSTest.

Proces polega na wywołaniu VSTest obiektu docelowego MSBuild, który wyzwala inne wewnętrzne obiekty docelowe do uruchomienia i ostatecznie uruchamia vstest.console. Wszystkie dotnet test opcje wiersza polecenia są przekładane na ich odpowiedniki w vstest.console.

Uruchamianie projektów MTP w trybie VSTest

dotnet test został zaprojektowany do uruchamiania projektów VSTest w trybie VSTest. Można jednak uruchamiać projekty MTP w trybie dotnet test VSTest przy użyciu pakietu Microsoft.Testing.Platform.MSBuild. Z perspektywy użytkownika ta obsługa jest włączona przez ustawienie TestingPlatformDotnetTestSupport właściwości MSBuild na true (domyślnie jest false to z powodów zgodności z poprzednimi wersjami). Gdy ta właściwość jest ustawiona na true, Microsoft. Testing.Platform.MSBuild zmienia zachowanie obiektu docelowego VSTest, przekierowując go do wywołania InvokeTestingPlatform. InvokeTestingPlatform jest obiektem docelowym MSBuild uwzględniony w Microsoft. Testing.Platform.MSBuild, który jest odpowiedzialny za prawidłowe uruchamianie aplikacji testowych MTP jako plików wykonywalnych. Opcje wiersza polecenia specyficzne dla programu VSTest, takie jak --logger, są dyskretnie ignorowane w tym trybie. Aby uwzględnić argumenty specyficzne dla protokołu MTP, takie jak --report-trx, należy je dołączyć po dodatkowym --. Na przykład dotnet test -- --report-trx. W 1.9 protokołu MTP jest generowane ostrzeżenie z kodem MTP0001, gdy zostanie wykryty argument ignorowany w trybie dyskretnym.

Uwaga

Narzędzia MSTest i NUnit używają pakietu Microsoft.Testing.Extensions.VSTestBridge. Ustawiając EnableMSTestRunner lub EnableNUnitRunner (co umożliwia Microsoft. Testing.Platform), projekt testowy będzie obsługiwać zarówno program VSTest, jak i Microsoft. Testing.Platform. W tym scenariuszu, jeśli używasz trybu dotnet test VSTest i nie ustawisz TestingPlatformDotnetTestSupport na wartość true, zasadniczo działasz całkowicie w VSTest, tak jakby EnableMSTestRunner i EnableNUnitRunner również nie były ustawione na true.

Uwaga

Zdecydowanie zaleca się ustawienie TestingPlatformDotnetTestSupport właściwości w Directory.Build.props. Dzięki temu nie trzeba dodawać go do każdego pliku projektu testowego indywidualnie. Ponadto zapobiega to ryzyku wprowadzenia nowego projektu testowego, który nie ustawia tej właściwości, co może spowodować rozwiązanie, w którym niektóre projekty używają narzędzia VSTest, podczas gdy inne używają Microsoft. Testing.Platform. Ta mieszana konfiguracja może nie działać poprawnie i jest nieobsługiwanym scenariuszem.

Ważne

Uruchamianie projektów MTP w trybie VSTest jest uważane za przestarzałe na rzecz nowszej wersji w .NET 10 SDK. Obsługa uruchamiania w tym trybie zostanie usunięta w Microsoft. Testing.Platform w wersji 2, jeśli jest uruchamiana z zestawem SDK .NET 10. Obsługa pozostaje dostępna dla zestawu SDK .NET 9 i starszych w celu zapewnienia zgodności z poprzednimi wersjami. Aby uzyskać więcej informacji, zobacz Migrowanie do trybu MTP programu dotnet test.

Poniższa lista przedstawia opcje wiersza poleceń komendy dotnet test w trybie VSTest, które są obsługiwane przez Microsoft Testing Platform. Te opcje są specyficzne dla procesu kompilacji i nie są przekazywane do programu VSTest, dlatego współpracują z MTP.

  • -a|--arch <ARCHITECTURE>
  • --artifacts-path <ARTIFACTS_DIR>
  • -c|--configuration <CONFIGURATION>
  • -f|--framework <FRAMEWORK>
  • -e|--environment <NAME="VALUE">
  • --interactive
  • --no-build
  • --nologo
  • --no-restore
  • -o|--output <OUTPUT_DIRECTORY>
  • --os <OS>
  • -r|--runtime <RUNTIME_IDENTIFIER>
  • -v|--verbosity <LEVEL>

Wskazówka

Argumenty wiersza polecenia aplikacji testowej można dostosować za pomocą TestingPlatformCommandLineArguments właściwości MSBuild:

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

Pokaż niepowodzenie dla każdego testu

Domyślnie błędy testów są sumowane w pliku .log, a pojedynczy błąd na projekt testowy jest zgłaszany w programie MSBuild.

Aby wyświetlić błędy dla nieudanego testu, podaj -p:TestingPlatformShowTestsFailure=true w wierszu polecenia lub dodaj właściwość <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure> w pliku projektu.

W wierszu polecenia:

dotnet test -p:TestingPlatformShowTestsFailure=true

Pokaż kompletne dane wyjściowe platformy

Domyślnie wszystkie dane wyjściowe konsoli, które zapisuje plik wykonywalny testu, są przechwytywane i ukrywane przed użytkownikiem. Obejmuje to baner, informacje o wersji i sformatowane informacje o teście.

Aby wyświetlić te informacje razem z danymi wyjściowymi programu MSBuild, użyj <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>.

Ta opcja nie ma wpływu na sposób, w jaki platforma testowania przechwytuje dane wyjściowe użytkownika zapisane przez Console.WriteLine lub inne podobne sposoby zapisywania w konsoli.

W wierszu polecenia:

dotnet test -p:TestingPlatformCaptureOutput=false

Zaawansowane szczegóły techniczne

W trybie dotnet test VSTest element -- jest używany do wskazywania argumentów RunSettings. Początkowo dotnet test został zaprojektowany do przekazywania tych argumentów jako właściwość MSBuild o nazwie VSTestCLIRunSettings. W związku z tym podczas uruchamiania aplikacji testowych MTP w trybie VSTest zmieniamy wartość VSTestCLIRunSettings , aby reprezentować "argumenty aplikacji".

Mieszanie narzędzi VSTest i Microsoft. Testing.Platform (MTP)

Podczas uruchamiania dotnet test w trybie VSTest zaleca się unikanie dołączania zarówno VSTest, jak i Microsoft.Testing.Platform w tym samym rozwiązaniu.

Ten scenariusz nie jest oficjalnie obsługiwany i należy pamiętać o następujących kwestiach:

  • Opcje wiersza polecenia specyficzne dla programu VSTest będą stosowane tylko do projektów VSTest, a nie do aplikacji testowych MTP.
  • Opcje wiersza polecenia specyficzne dla protokołu MTP podane po -- będą traktowane jako argumenty RunSettings dla projektów VSTest.

Kluczowe wnioski

  • Aby uruchomić aplikacje testowe MTP w trybie dotnet test VSTest, należy użyć Microsoft.Testing.Platform.MSBuild, a następnie przekazać dodatkowe opcje wiersza polecenia specyficzne dla MTP po --, i ustawić TestingPlatformDotnetTestSupport na true.
  • Opcje wiersza polecenia dotyczące programu VSTest są pomijane bez powiadomienia.

Ze względu na te problemy, w .NET został wprowadzony nowy tryb dotnet test specjalnie zaprojektowany dla MTP. Zachęcamy użytkowników MTP do przejścia z trybu VSTest dotnet test do nowego trybu przy użyciu zestawu SDK .NET 10.

Microsoft.Testing.Platform (MTP) mode of dotnet test

Aby rozwiązać problemy występujące podczas uruchamiania dotnet test z protokołem MTP w trybie VSTest, .NET wprowadziło nowy tryb w .NET 10 SDK przeznaczony specjalnie dla MTP.

Aby włączyć ten tryb, dodaj następującą konfigurację do pliku global.json :

{
    "test": {
        "runner": "Microsoft.Testing.Platform"
    }
}

Ważne

Środowisko dotnet test dla MTP jest obsługiwane tylko w Microsoft.Testing.Platform wersji 1.7 lub nowszej.

Ponieważ ten tryb jest specjalnie zaprojektowany dla Microsoft. Testing.Platform ani TestingPlatformDotnetTestSupport, ani dodatkowe -- są wymagane.

Ważne

Ten tryb jest zgodny tylko z Microsoft. Testing.Platform w wersji 1.7.0 lub nowszej.

Ważne

Jeśli projekt testowy obsługuje narzędzie VSTest, ale nie obsługuje protokołu MTP, zostanie wygenerowany błąd.

Wskazówka

Argumenty wiersza polecenia aplikacji testowej można dostosować za pomocą TestingPlatformCommandLineArguments właściwości MSBuild:

<PropertyGroup>
  ...
  <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
</PropertyGroup>

Przejdź do trybu MTP dotnet test

W przypadku użytkowników protokołu MTP korzystających z trybu VSTest programu dotnet test należy wykonać kilka czynności, aby przejść do nowszego środowiska dotnet test.

  1. Dodaj test sekcję do global.json pliku, jak pokazano powyżej.
  2. Usuń TestingPlatformDotnetTestSupport właściwość MSBuild, ponieważ nie jest już wymagana.
  3. Usuń TestingPlatformCaptureOutput i TestingPlatformShowTestsFailure właściwości MSBuild, ponieważ nie są już używane przez nowy element dotnet test.
  4. Usuń dodatkowy element --, na przykład dotnet test -- --report-trx powinien stać się .dotnet test --report-trx
  5. Przekazując określone rozwiązanie (lub katalog zawierający rozwiązanie), na przykład dotnet test MySolution.sln, powinno to stać się dotnet test --solution MySolution.sln.
  6. Jeśli przekażesz konkretny projekt (lub katalog zawierający projekt), na przykład dotnet test MyProject.csproj, powinno to stać się dotnet test --project MyProject.csproj.
  7. Jeśli przekazuje konkretną bibliotekę DLL, na przykład dotnet test path/to/UnitTests.dll, powinno to stać się dotnet test --test-modules path/to/UnitTests.dll. Należy pamiętać, że --test-modules obsługuje również globbing.