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

Tento článek obsahuje přehled o příkazu rozhraní příkazového řádku dotnet test, včetně historické kompatibility s VSTestem i Microsoft.Testing.Platform (MTP).

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

  • VSTest režim: Toto je výchozí režim pro dotnet test a byl jediným dostupným režimem před .NET 10 SDK. Je primárně určen pro VSTest, ale může také spouštět testy Microsoft.Testing.Platform prostřednictvím balíčku NuGet Microsoft.Testing.Platform.MSBuild.
  • Microsoft. Testing.Platform režim: Zavedený se sadou .NET 10 SDK podporuje tento režim výhradně testovací aplikace vytvořené pomocí 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 režimu dotnet test VSTest pomocí Microsoft. Testing.Platform.MSBuild balíček. 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í chování cíle VSTest a přesměruje ho na volání InvokeTestingPlatform. InvokeTestingPlatform je cíl nástroje 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 (který povolí Microsoft. Testing.Platform) váš testovací projekt bude podporovat VSTest i 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í, kdy 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ěží s .NET 10 SDK. Podpora zůstává k dispozici pro .NET 9 SDK a starší pro zpětnou kompatibilitu. Další informace naleznete v tématu Migrace do režimu MTP .dotnet test

Následující seznam popisuje možnosti příkazového řádku příkazu dotnet test v režimu VSTest, které jsou podporovány 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>

Zobrazit selhání pro test

Ve výchozím nastavení se selhání testů shrnují do souboru .log a do nástroje MSBuild se hlásí jedno selhání na jeden testovací projekt.

Pokud chcete zobrazit chyby na neúspěšný test, zadejte na příkazovém řádku -p:TestingPlatformShowTestsFailure=true nebo do souboru projektu přidejte vlastnost <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>.

Na příkazovém řádku:

dotnet test -p:TestingPlatformShowTestsFailure=true

Zobrazit úplný výstup platformy

Ve výchozím nastavení se veškerý výstup konzoly, který zapisuje podkladový testovací spustitelný soubor, zachytí a skryje uživateli. To zahrnuje banner, informace o verzi a formátované testovací informace.

Chcete-li zobrazit tyto informace společně s výstupem nástroje MSBuild, použijte <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>.

Tato možnost nemá vliv na to, jak testovací architektura zachycuje výstup uživatele napsaný Console.WriteLine nebo jinými podobnými způsoby zápisu do konzoly.

Na příkazovém řádku:

dotnet test -p:TestingPlatformCaptureOutput=false

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".

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

Při spuštění dotnet test v režimu VSTest se doporučuje vyhnout zahrnutí VSTestu i Microsoft. Testing.Platform ve stejném ř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 režimu dotnet test 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 .NET zavedl nový režim dotnet test speciálně navržený pro MTP. Doporučujeme uživatelům MTP přejít z režimu VSTest dotnet test do nového režimu pomocí sady SDK .NET 10.

Microsoft.Testing.Platform (MTP) režim dotnet test

Pokud chcete vyřešit problémy, ke kterým došlo při spuštění dotnet test s MTP v režimu VSTest, .NET zavedl nový režim v sadě SDK .NET 10, 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 v Microsoft.Testing.Platform verze 1.7 a novější.

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

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.