Pokrytí kódu

Návod

Pokud používáte Microsoft.Testing.Platform.MSBuild (zahrnutý nepřímo pomocí MSTest, NUnit a xUnit runnerů), rozšíření pokrytí kódu se automaticky zaregistrují při instalaci jejich balíčků NuGet – není nutná žádná úprava kódu.

Můžete použít funkci pokrytí kódu s Microsoft.Testing.Platform (MTP) k určení podílu kódu projektu, který je testován kódovanými testy, jako jsou testy jednotek. Aby byly účinné proti chybám, měly by vaše testy zahrnovat nebo obsáhnout velkou část vašeho kódu.

Pokrytí kódu Microsoftu

Analýza pokrytí kódu Microsoftu je možná pro spravovaný (CLR) i nespravovaný (nativní) kód. Podporují se statické i dynamické instrumentace. Toto rozšíření vyžaduje balíček NuGet Microsoft.Testing.Extensions.CodeCoverage .

Poznámka:

Ve výchozím nastavení je v rozšíření zakázané nespravované (nativní) pokrytí kódu. V případě potřeby je povolte pomocí příznaků EnableStaticNativeInstrumentation a EnableDynamicNativeInstrumentation. Další informace o nespravovaném pokrytí kódu naleznete v tématu Statické a dynamické nativní instrumentování.

Důležité

Balíček se dodává s uzavřenou knihovnou Microsoft .NET, která je k dispozici zdarma k použití na základě licenčního modelu.

Další informace o pokrytí kódu společnosti Microsoft najdete na stránce GitHub.

Možnosti

Možnost Description
--coverage Ke shromáždění pokrytí kódu použijte nástroj dotnet-coverage.
--coverage-output Název nebo cesta vytvořeného souboru pokrytí. Relativní cesty se přeloží z adresáře výsledků testů. Výchozí hodnota je <guid>.coverage v tomto adresáři. Viz Výstupní soubory pokrytí.
--coverage-output-format Formát výstupního souboru Podporované hodnoty jsou: coverage, xmla cobertura. Výchozí hodnota je coverage.
--coverage-settings nastavení pokrytí kódu XML.

Další informace o dostupných možnostech najdete v tématu settings a samples.

Poznámka:

Výchozí hodnota IncludeTestAssembly v Microsoft.Testing.Extensions.CodeCoverage je false, zatímco se používá v true VSTest. To znamená, že projekty testů jsou ve výchozím nastavení vyloučené. Další informace najdete v tématu Konfigurace pokrytí kódu.

Výstupní soubory pokrytí

Chcete-li zachovat sestavu pokrytí každé aplikace při běhu s více moduly dotnet test, vynechte --coverage-output. Rozšíření pro každou sestavu vygeneruje název založený na GUID a vybere příponu souboru z --coverage-output-format:

dotnet test -- --coverage --coverage-output-format cobertura

Pokud zadáte --coverage-output, dotnet test předá stejnou hodnotu každé testovací aplikaci. Relativní cesta se vyhodnocuje z adresáře výsledků dané aplikace; absolutní cesta se používá tak, jak je zadána. Tato možnost nevyžaduje sloučenou sestavu na úrovni řešení.

Warning

Při použití výchozího rozložení flat si aplikace, které používají stejnou výstupní cestu, navzájem přepíší sestavy pokrytí, i když běží sériově. Testovací příkaz může proběhnout úspěšně bez upozornění na ztracené pokrytí testy.

Pokud chcete zachovat pevný relativní název souboru bez kolizí, použijte možnost sady SDK -- před --results-directory-layout per-module:

dotnet test --results-directory-layout per-module -- --coverage --coverage-output-format cobertura --coverage-output my-output-file.xml

Každá aplikace zapisuje my-output-file.xml pod vlastní adresář projektu/frameworku/runtime. Absolutní --coverage-output cesta obchází tyto adresáře. Pokud chcete sestavy oddělit, použijte pro každou aplikaci relativní název souboru nebo jinou absolutní cestu.

Kompatibilní rozšíření pokrytí můžou sloučit zachované sestavy prostřednictvím následného zpracování artefaktů. Tato funkce je oddělená od --coverage-output a nemůže obnovit data přepsaná před sloučením.

Zástupné symboly názvu souboru sestavy, například {asm}, {tfm}a {arch}, se vztahují na testovací sestavy, nikoli na --coverage-output.

Souhrny pokrytí a prahové hodnoty

Důležité

Model výsledků pokrytí první třídy je k dispozici od MTP 2.4.

Kompatibilní kolektory můžou publikovat zahrnuté a kryté měření, vyhodnocení prahových hodnot a odkazy na sestavu pokrytí jako jeden korelovaný výsledek pokrytí testu. Terminálový reportér a kompatibilní příjemci reportů zobrazují měření a odvozují procenta bez parsování souborů specifických pro daný kolektor.

Kolektory se rozhodnou, jestli se má tento model publikovat. K nastavení sběru a prahových hodnot použijte zdokumentované možnosti kolektoru.

Pokud vytvoříte kolektor, publikujte TestCoverageMessage, TestCoverageThresholdMessage a TestCoverageReportMessage prostřednictvím sběrnice zpráv. Smlouvy a spustitelné příklady najdete v tématu Publikování výsledků pokrytí. Pro korelovaná data v rozšíření sestavy použijte služby ITestCoverageCapabilities a ITestCoverageResult.

Pokud publikované vyhodnocení prahové hodnoty selže, ukončí se jinak úspěšné spuštění s kódem 14. Použijte --ignore-exit-code 14, když by selhání prahové hodnoty nemělo způsobit selhání procesu.

Kompatibilita verzí

Následující tabulka uvádí kompatibilitu mezi různými verzemi Microsoft. Testing.Extensions.CodeCoverage a MTP:

Microsoft.Testing.Extensions.CodeCoverage MTP
18.1.x 2.0.x
18.0.x 1.8.x
17.14.x 1.6.2

Poznámka:

Nejlepší kompatibilitu a nejnovější funkce doporučujeme používat společně s nejnovějšími verzemi obou balíčků.

Pokrývka

Coverlet Microsoft Testing Platform Integration (coverlet.MTP) je nativní rozšíření pro MTP, které implementuje funkce coverlet.collector.

Do testovacího project přidejte balíček NuGet coverlet.MTP:

dotnet add package coverlet.MTP

Pokud chcete shromáždit pokrytí kódu, spusťte testy s příznakem --coverlet:

dotnet test --coverlet

Nebo spusťte testovací spustitelný soubor s příznakem --coverlet :

dotnet exec <test-assembly.dll> --coverlet

Po testovacím spuštění coverage.json se vygeneruje soubor obsahující výsledky v aktuálním adresáři.

Možnosti

Možnost Description
--coverlet Povolte shromažďování dat pokrytí kódu.
--coverlet-output-format <format> Formáty výstupu pro sestavu pokrytí Podporované formáty: json, lcov, opencover, coberturaa teamcity. Zadejte vícekrát pro zahrnutí více formátů.
--coverlet-include <filter> Zahrnout sestavení, která odpovídají filtrům, například [Assembly]Type. Zadejte vícekrát pro přidání dalších filtrů.
--coverlet-include-directory <path> Zahrňte další adresáře pro zdrojové soubory. Pro přidání dalších adresářů zadejte příkaz vícekrát.
--coverlet-exclude <filter> Vylučte sestavení, která odpovídají filtrům, například [Assembly]Type. Zadejte vícekrát pro přidání dalších filtrů.
--coverlet-exclude-by-file <pattern> Vylučte zdrojové soubory, které odpovídají vzorům globu. Zadejte vícekrát pro přidání dalších vzorů.
--coverlet-exclude-by-attribute <attribute> Vylučte metody nebo třídy zdobené konkrétními atributy. Specifikujte vícekrát, abyste přidali další atributy.
--coverlet-include-test-assembly Zahrňte testovací sestavení do sestavy pokrytí.
--coverlet-single-hit Omezte počet přístupů na jeden pro každé místo v kódu.
--coverlet-skip-auto-props Přeskočte automaticky implementované vlastnosti v pokrytí.
--coverlet-does-not-return-attribute <attribute> Atributy, které označují metody jako nevýrazné. Specifikujte vícekrát, abyste přidali další atributy.
--coverlet-exclude-assemblies-without-sources <value> Vylučte sestavení bez zdrojového kódu. Hodnoty: MissingAll, MissingAnya None.

Další informace najdete v dokumentaci coverlet.MTP.