Sdílet prostřednictvím


Testování pomocí příkazu 'dotnet test'

Tento článek poskytuje přehled o příkazu dotnet test příkazového řádku, včetně jeho kompatibility v minulosti s VSTest i Microsoft.Testing.Platform (MTP).

Příkaz dotnet test funguje ve dvou primárních režimech:

  • Režim VSTest : Jedná se o výchozí režim pro dotnet test a byl jediným dostupným režimem před sadou .NET 10 SDK. Je primárně určen pro VSTest, ale může také spouštět Microsoft.Testing.Platform test prostřednictvím balíčku NuGet Microsoft.Testing.Platform.MSBuild .
  • Režim Microsoft.Testing.Platform : Zavedený se sadou .NET 10 SDK, tento režim výhradně podporuje testovací aplikace vytvořené pomocí platformy Microsoft.Testing.Platform.

Návod

Referenční informace k rozhraní příkazového řádku najdete v dotnet test.

Režim VSTestu dotnet test

VSTest byl dlouhou dobu jedinou testovací platformou v .NET. V důsledku toho dotnet test byl výhradně navržen pro VSTest se všemi možnostmi příkazového řádku přizpůsobenými VSTestu.

Proces zahrnuje vyvolání VSTest cíle MSBuild, což spustí další interní cíle a nakonec spustí vstest.console. Všechny dotnet test možnosti příkazového řádku se převádějí na jejich ekvivalenty ve vstest.console.

Spouštění projektů MTP v režimu VSTest

dotnet test byl navržen tak, aby spouštěl projekty VSTest v režimu VSTest. Projekty MTP však můžete spouštět v dotnet test režimu VSTest pomocí balíčku Microsoft.Testing.Platform.MSBuild . Z pohledu uživatele je tato podpora povolena nastavením TestingPlatformDotnetTestSupport vlastnosti MSBuild na true (je false to ve výchozím nastavení z důvodu zpětné kompatibility). Pokud je tato vlastnost nastavena na true, Microsoft.Testing.Platform.MSBuild změní VSTest cílové chování, přesměrování na volání InvokeTestingPlatform. InvokeTestingPlatform je cíl MSBuild zahrnutý v Microsoft.Testing.Platform.MSBuild, který je zodpovědný za správné spouštění testovacích aplikací MTP jako spustitelných souborů. Možnosti příkazového řádku specifické pro VSTest, například --logger, se v tomto režimu bezobslužně ignorují. Pokud chcete zahrnout argumenty specifické pro MTP, například --report-trx, musíte je připojit za další --. Například: dotnet test -- --report-trx. V MTP 1.9 se při zjištění argumentu bezobslužného ignorování vytvoří upozornění s kódem MTP0001.

Poznámka:

MSTest a NUnit používají balíček Microsoft.Testing.Extensions.VSTestBridge . Nastavením EnableMSTestRunner nebo EnableNUnitRunner (což povoluje Microsoft.Testing.Platform) bude váš testovací projekt podporovat jak VSTest, tak Microsoft.Testing.Platform. Pokud v tomto scénáři použijete režim dotnet test VSTest a nenastavíte TestingPlatformDotnetTestSupport hodnotu true, v podstatě běžíte zcela s VSTest, jako kdyby EnableMSTestRunner a EnableNUnitRunner nejsou nastaveny na true.

Poznámka:

Důrazně doporučujeme nastavit TestingPlatformDotnetTestSupport vlastnost v Directory.Build.props. Tím zajistíte, že ho nemusíte přidávat do každého testovacího souboru projektu jednotlivě. Kromě toho zabraňuje riziku zavedení nového testovacího projektu, který nenastaví tuto vlastnost, což může vést k řešení, ve kterém některé projekty používají VSTest, zatímco jiné používají Microsoft.Testing.Platform. Tato smíšená konfigurace nemusí fungovat správně a je to nepodporovaný scénář.

Důležité

Spouštění projektů MTP v režimu VSTest se považuje za starší verzi ve prospěch novějšího prostředí v sadě .NET 10 SDK. Podpora spuštění v tomto režimu se odebere v microsoft.Testing.Platform verze 2, pokud běží se sadou .NET 10 SDK. Podpora zůstává k dispozici pro .NET 9 SDK a starší verze pro zajištění zpětné kompatibility. Další informace naleznete v tématu Migrace do režimu MTP .dotnet test

Následující seznam popisuje možnosti příkazového dotnet test řádku příkazu v režimu VSTest, které podporuje Microsoft.Testing.Platform. Tyto možnosti jsou specifické pro proces sestavení a nejsou předány službě VSTest, proto fungují s 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>

Návod

Argumenty příkazového řádku testovací aplikace můžete přizpůsobit pomocí TestingPlatformCommandLineArguments vlastnosti MSBuild:

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

Další informace týkající se spouštění projektů MTP v režimu VSTest naleznete dotnet testv tématu Použití Microsoft.Testing.Platform s režimem VSTest .dotnet test

Pokročilé technické podrobnosti

V režimu dotnet test VSTest se -- používá k označení argumentů RunSettings. Původně byl dotnet test navržen tak, aby tyto argumenty předal jako vlastnost MSBuild nazvanou VSTestCLIRunSettings. Proto při spouštění testovacích aplikací MTP v režimu VSTest znovu použijeme hodnotu VSTestCLIRunSettings , která představuje "argumenty aplikace".

Kombinování VSTest a Microsoft.Testing.Platform (MTP)

Při spuštění dotnet test v režimu VSTest se doporučuje vyhnout zahrnutí VSTest i Microsoft.Testing.Platform do stejného řešení.

Tento scénář není oficiálně podporovaný a měli byste vědět o následujících situacích:

  • Možnosti příkazového řádku specifické pro VSTest budou platit pouze pro projekty VSTest, a ne pro testovací aplikace MTP.
  • Možnosti příkazového řádku specifické pro MTP zadané po -- budou považovány za argumenty RunSettings pro projekty VSTest.

Klíčové poznatky

  • Pokud chcete spouštět testovací aplikace MTP v dotnet test režimu VSTest, měli byste použít Microsoft.Testing.Platform.MSBuild, předat možnosti příkazového řádku specifické pro MTP za extra --a nastavit TestingPlatformDotnetTestSupport na true.
  • Možnosti příkazového řádku orientované na VSTest jsou bezobslužně ignorovány.

Kvůli těmto problémům platforma .NET zavedla nový dotnet test režim určený speciálně pro MTP. Doporučujeme uživatelům MTP přejít z režimu VSTest dotnet test do nového režimu pomocí sady .NET 10 SDK.

Režim platformy Microsoft.Testing.Platform (MTP) dotnet test

Aby se vyřešily problémy, ke kterým došlo při spuštění dotnet test STP v režimu VSTest, platforma .NET zavedla v sadě .NET 10 SDK nový režim, který je speciálně navržený pro MTP.

Pokud chcete tento režim povolit, přidejte do global.json souboru následující konfiguraci:

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

Důležité

Prostředí dotnet test pro MTP je podporováno pouze ve Microsoft.Testing.Platform verzi 1.7 a novější.

Vzhledem k tomu, že tento režim je speciálně navržený pro Microsoft.Testing.Platform, TestingPlatformDotnetTestSupport ani další -- nejsou vyžadovány.

Důležité

Tento režim je kompatibilní pouze s Microsoft.Testing.Platform verze 1.7.0 a novější.

Důležité

Pokud váš testovací projekt podporuje VSTest, ale nepodporuje MTP, vygeneruje se chyba.

Návod

Argumenty příkazového řádku testovací aplikace můžete přizpůsobit pomocí TestingPlatformCommandLineArguments vlastnosti MSBuild:

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

Migrace do režimu MTP dotnet test

Pro uživatele MTP, kteří používají režim VSTest, dotnet test je třeba podniknout několik kroků pro přechod na novější prostředí dotnet test.

  1. Přidejte oddíl test do souboru global.json, jak je znázorněno výše.
  2. Odeberte vlastnost TestingPlatformDotnetTestSupport MSBuild, protože už není požadována.
  3. Odeberte TestingPlatformCaptureOutput a TestingPlatformShowTestsFailure vlastnosti MSBuild, protože již nejsou používány novým dotnet test.
  4. Odeberte nadbytečné --, například dotnet test -- --report-trx by se mělo stát dotnet test --report-trx.
  5. Pokud například předáte konkrétní řešení (nebo adresář obsahující řešení), dotnet test MySolution.slnmělo by se to stát dotnet test --solution MySolution.sln.
  6. Pokud například dotnet test MyProject.csprojpředáte konkrétní projekt (nebo adresář obsahující projekt), mělo by se to stát dotnet test --project MyProject.csproj.
  7. Pokud například předáte konkrétní knihovnu DLL, dotnet test path/to/UnitTests.dll, měla by se změnit na dotnet test --test-modules path/to/UnitTests.dll. Mějte na paměti, že --test-modules podporuje také globbing.