Udostępnij za pośrednictwem


dotnet-coverage code coverage utility (narzędzie pokrycia kodu dotnet-coverage)

Ten artykuł dotyczy: ✔️ zestaw .NET Core 3.1 SDK i nowsze wersje

Streszczenie

dotnet-coverage [-h, --help] [--version] <command>

opis

Narzędzie dotnet-coverage :

  • Umożliwia wieloplatformowe zbieranie danych pokrycia kodu uruchomionego procesu.
  • Zapewnia scalanie międzyplatformowych raportów pokrycia kodu.

Opcje

  • -h|--help

    Pokazuje pomoc wiersza polecenia.

  • --version

    Wyświetla wersję narzędzia dotnet-coverage.

Instalowanie

Aby zainstalować najnowszą wersję dotnet-coverage pakietu NuGet, użyj polecenia dotnet tool install :

dotnet tool install --global dotnet-coverage

Polecenia

Polecenie
dotnet-coverage merge
dotnet-coverage collect
dotnet-coverage connect
dotnet-coverage snapshot
dotnet-coverage shutdown
dotnet-coverage instrument

dotnet-coverage merge

Polecenie merge służy do scalania kilku raportów pokrycia kodu w jeden. To polecenie jest dostępne na wszystkich platformach. To polecenie obsługuje następujące formaty raportów pokrycia kodu:

  • coverage
  • cobertura
  • xml

Streszczenie

dotnet-coverage merge
    [--remove-input-files]
    [-o|--output <output>] [-f|--output-format <output-format>]
    [-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
    <files>

Argumenty

  • <files>

    Raporty pokrycia kodu wejściowego.

Opcje

  • --remove-input-files

    Usuwa wszystkie raporty pokrycia danych wejściowych, które zostały scalone.

  • -r, --recursive

    Zestaw .NET 7 SDK i starsze wersje wyszukują tylko raporty pokrycia w podkatalogach.

  • -o|--output <output>

    Ustawia plik wyjściowy raportu pokrycia kodu.

  • -f|--output-format <output-format>

    Format pliku wyjściowego. Obsługiwane wartości: coverage, xmli cobertura. Wartość domyślna to coverage (format binarny, który można otworzyć w programie Visual Studio).

  • -l|--log-file <log-file>

    Ustawia ścieżkę pliku dziennika. Po podaniu katalogu (z separatorem ścieżki na końcu) dla każdego procesu analiz generowany jest nowy plik dziennika.

  • -ll|--log-level <log-level>

    Ustawia poziom dziennika. Obsługiwane wartości: Error, Infoi Verbose.

dotnet-coverage collect

Polecenie służy do zbierania collect danych pokrycia kodu dla dowolnego procesu platformy .NET i jego podprocesów. Można na przykład zbierać dane pokrycia kodu dla aplikacji konsolowej lub aplikacji Blazor. To polecenie obsługuje instrumentację dynamiczną i statyczną. Instrumentacja statyczna jest dostępna na wszystkich platformach. Można określić pliki, które mają być statycznie instrumentowane przy użyciu include-files opcji. Instrumentacja dynamiczna jest dostępna w systemach Windows (x86, x64 i Arm64), Linux (x64) i macOS (x64). Polecenie obsługuje tylko moduły .NET. Moduły natywne nie są obsługiwane.

Streszczenie

Polecenie collect można uruchomić w dwóch trybach.

Tryb polecenia

Polecenie collect będzie zbierać pokrycie kodu dla danego procesu wykonywanego command przez argument.

dotnet-coverage collect
    [-s|--settings <settings>] [-id|--session-id <session-id>]
    [-if|--include-files <include-files>] [-o|--output <output>]
    [-f|--output-format <output-format>] [-l|--log-file <log-file>]
    [-ll|--log-level <log-level>] [-?|-h|--help]
    <command> <args>

Tryb serwera

Polecenie collect hostuje serwer na potrzeby zbierania pokrycia kodu. Klienci mogą łączyć się z serwerem za pomocą connect polecenia .

dotnet-coverage collect
    [-s|--settings <settings>] [-id|--session-id <session-id>]
    [-sv|--server-mode] [-b|--background] [-t|--timeout]
    [-if|--include-files <include-files>] [-o|--output <output>]
    [-f|--output-format <output-format>] [-l|--log-file <log-file>]
    [-ll|--log-level <log-level>] [-?|-h|--help]

Argumenty

  • <command>

    Polecenie służące do zbierania danych pokrycia kodu.

  • <args>

    Argumenty wiersza polecenia dla polecenia.

Opcje

  • -s|--settings <settings>

    Ustawia ścieżkę do ustawień pokrycia kodu XML.

  • -id|--session-id <session-id>

    Określa identyfikator sesji pokrycia kodu. Jeśli nie zostanie podany, narzędzie wygeneruje losowy identyfikator GUID.

  • -sv|--server-mode

    Uruchamia moduł zbierający w trybie serwera. Klienci mogą łączyć się z serwerem za connect pomocą polecenia .

  • -b|--background

    Uruchamia serwer zbierania pokrycia kodu w nowym procesie w tle. Klienci mogą łączyć się z serwerem za connect pomocą polecenia .

  • -t|--timeout

    Limit czasu (w milisekundach) dla komunikacji międzyprocesowej między klientami a serwerem.

  • -if|--include-files <include-files>

    Określa listę plików, które mają być statycznie instrumentowane.

  • -o|--output <output>

    Ustawia plik wyjściowy raportu pokrycia kodu.

  • -f|--output-format <output-format>

    Format pliku wyjściowego. Obsługiwane wartości: coverage, xmli cobertura. Wartość domyślna to coverage (format binarny, który można otworzyć w programie Visual Studio).

  • -l|--log-file <log-file>

    Ustawia ścieżkę pliku dziennika. Po podaniu katalogu (z separatorem ścieżki na końcu) dla każdego procesu analiz generowany jest nowy plik dziennika.

  • -ll|--log-level <log-level>

    Ustawia poziom dziennika. Obsługiwane wartości: Error, Infoi Verbose.

dotnet-coverage connect

Polecenie connect służy do nawiązywania połączenia z istniejącym serwerem i zbiera dane pokrycia kodu dla dowolnego procesu platformy .NET i jego podprocesów. Można na przykład zbierać dane pokrycia kodu dla aplikacji konsolowej lub aplikacji Blazor. Polecenie obsługuje tylko moduły .NET. Moduły natywne nie są obsługiwane.

Uwaga

Polecenie będzie używać instrumentacji dynamicznej dla wszystkich podprocesów, które są dostępne w systemie Windows (x86, x64 i Arm64), Linux (x64) i macOS (x64). Jeśli musisz statycznie instrumentować dowolny moduł .NET użyj instrument polecenia (z odpowiednią opcją identyfikatora sesji) przed wykonaniem connect polecenia.

Streszczenie

dotnet-coverage connect
    [-b|--background] [-t|--timeout]
    [-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
    <session>
    <command> <args>

Argumenty

  • <session>

    Identyfikator sesji serwera hostowanego collect przez polecenie .

  • <command>

    Polecenie służące do zbierania danych pokrycia kodu.

  • <args>

    Argumenty wiersza polecenia dla polecenia.

Opcje

  • -b|--background

    Uruchamia klienta w nowym procesie w tle.

  • -t|--timeout

    Limit czasu (w milisekundach) dla komunikacji między procesami między klientem a serwerem.* -l|--log-file <log-file>

  • -l|--log-file <log-file>

    Ustawia ścieżkę pliku dziennika. Po podaniu katalogu (z separatorem ścieżki na końcu) dla każdego procesu analiz generowany jest nowy plik dziennika.

  • -ll|--log-level <log-level>

    Ustawia poziom dziennika. Obsługiwane wartości: Error, Infoi Verbose.

dotnet-coverage snapshot

Tworzy plik pokrycia dla istniejącej kolekcji pokrycia kodu.

Streszczenie

dotnet-coverage snapshot
    [-r|--reset]
    [-o|--output <output>]
    [-tn|--tag-name <tag-name>] [-tid|--tag-identifier <tag-identifier>]
    [-t|--timeout]
    [-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
    <session>

Argumenty

  • <session>

    Identyfikator sesji kolekcji, dla której ma zostać wygenerowany plik pokrycia.

Opcje

  • -r|--reset <reset>

    Czyści istniejące informacje o pokryciu po utworzeniu pliku pokrycia.

  • -o|--output <output>

    Ustawia plik wyjściowy raportu pokrycia kodu. Jeśli nie zostanie podana, zostanie ona wygenerowana automatycznie przy użyciu znacznika czasu.

  • -tn|--tag-name <tag-name>

    Tworzy nazwę tagu migawki w pliku pokrycia z bieżącymi informacjami o pokryciu. Nazwy tagów i identyfikator tagów wzajemnie się integrują.

  • -tid|--tag-identifier <tag-identifier>

    Tworzy identyfikator tagu migawki w pliku pokrycia z bieżącymi informacjami o pokryciu. Nazwy tagów i identyfikator tagów wzajemnie się integrują.

  • -t|--timeout

    Limit czasu (w milisekundach) dla komunikacji międzyprocesowej między klientem a serwerem.

  • -l|--log-file <log-file>

    Ustawia ścieżkę pliku dziennika. Po podaniu katalogu (z separatorem ścieżki na końcu) dla każdego procesu analiz generowany jest nowy plik dziennika.

  • -ll|--log-level <log-level>

    Ustawia poziom dziennika. Obsługiwane wartości: Error, Infoi Verbose.

dotnet-coverage shutdown

Zamyka istniejącą kolekcję pokrycia kodu.

Streszczenie

dotnet-coverage shutdown
    [-t|--timeout]
    [-l|--log-file <log-file>] [-ll|--log-level <log-level>] [-?|-h|--help]
    <session>

Argumenty

  • <session>

    Identyfikator sesji kolekcji do zamknięcia.

Opcje

  • -t|--timeout

    Limit czasu (w milisekundach) dla komunikacji międzyprocesowej z serwerem.

  • -l|--log-file <log-file>

    Ustawia ścieżkę pliku dziennika. Po podaniu katalogu (z separatorem ścieżki na końcu) dla każdego procesu analiz generowany jest nowy plik dziennika.

  • -ll|--log-level <log-level>

    Ustawia poziom dziennika. Obsługiwane wartości: Error, Infoi Verbose.

dotnet-coverage instrument

Polecenie instrument jest używane do instrumentowania danych binarnych na dysku.

Streszczenie

dotnet-coverage instrument
    [-s|--settings <settings>] [-id|--session-id <session-id>]
    [-o|--output <output>] [-l|--log-file <log-file>]
    [-ll|--log-level <log-level>] [-?|-h|--help]
    <input-file>

Argumenty

  • <input-file>

    Wejściowy plik binarny.

Opcje

  • -s|--settings <settings>

    Ustawia ścieżkę do ustawień pokrycia kodu XML.

  • -id|--session-id <session-id>

    Określa identyfikator sesji pokrycia kodu. Jeśli nie zostanie podany, narzędzie wygeneruje losowy identyfikator GUID.

  • -o|--output <output>

    Ustawia ścieżkę do pliku wyjściowego binarnego. Jeśli nie zostanie podana, instrumentacja zostanie wykonana w miejscu.

  • -l|--log-file <log-file>

    Ustawia ścieżkę pliku dziennika. Po podaniu katalogu (z separatorem ścieżki na końcu) dla każdego procesu analiz generowany jest nowy plik dziennika.

  • -ll|--log-level <log-level>

    Ustawia poziom dziennika. Obsługiwane wartości: Error, Infoi Verbose.

Przykładowe scenariusze

Zbieranie pokrycia kodu

Zbierz dane pokrycia kodu dla dowolnej aplikacji .NET (takiej jak konsola lub Blazor), używając następującego polecenia:

dotnet-coverage collect dotnet run

W przypadku aplikacji, która wymaga zakończenia sygnału, można użyć kombinacji Ctrl+C, która nadal umożliwia zbieranie danych pokrycia kodu. W przypadku argumentu można podać dowolne polecenie, które ostatecznie uruchomi aplikację .NET. Na przykład może to być skrypt programu PowerShell.

Sesje

Gdy uruchamiasz analizę pokrycia kodu na serwerze .NET, który po prostu czeka na komunikaty i wysyła odpowiedzi, musisz zatrzymać serwer, aby uzyskać końcowe wyniki pokrycia kodu. Możesz użyć Ctrl+C lokalnie, ale nie w usłudze Azure Pipelines. W tych scenariuszach można użyć sesji. Identyfikator sesji można określić podczas uruchamiania kolekcji, a następnie użyć shutdown polecenia , aby zatrzymać zbieranie i serwer.

Załóżmy na przykład, że masz serwer w katalogu D:\serverexample\server i projekt testowy w katalogu D:\serverexample\tests . Testy komunikują się z serwerem za pośrednictwem sieci. Kolekcję pokrycia kodu dla serwera można uruchomić w następujący sposób:

D:\serverexample\server> dotnet-coverage collect --session-id serverdemo "dotnet run"

Identyfikator sesji został określony jako serverdemo. Następnie możesz uruchomić testy w następujący sposób:

D:\serverexample\tests> dotnet test

Plik pokrycia kodu dla sesji serverdemo można wygenerować z bieżącym pokryciem w następujący sposób:

dotnet-coverage snapshot --output after_first_test.coverage serverdemo

Ponadto tag migawki można dodać do pliku pokrycia przy użyciu opcji tagu w następujący sposób:

dotnet-coverage snapshot --tag-name after_first_test --tag-identifier after_first_test serverdemo

Na koniec sesja serverdemo i serwer można zamknąć w następujący sposób:

dotnet-coverage shutdown serverdemo

Oto przykład pełnych danych wyjściowych po stronie serwera:

D:\serverexample\server> dotnet-coverage collect --session-id serverdemo "dotnet run"
SessionId: serverdemo
Waiting for a connection... Connected!
Received: Hello!
Sent: HELLO!
Waiting for a connection... Code coverage results: output.coverage.
D:\serverexample\server>

Tryb serwera i klienta

Zbieranie pokrycia kodu można również wykonać w trybie klienta serwera. W tym scenariuszu zostanie uruchomiony serwer zbierania pokrycia kodu, a wielu klientów może nawiązać połączenie z serwerem. Pokrycie kodu jest zbierane zbiorczo dla wszystkich klientów.

Uruchom serwer pokrycia kodu przy użyciu następującego polecenia:

dotnet-coverage collect --session-id serverdemo --server-mode

W tym przykładzie identyfikator sesji został określony jako serverdemo dla serwera. Klient może nawiązać połączenie z serwerem przy użyciu tego identyfikatora sesji przy użyciu następującego polecenia:

dotnet-coverage connect serverdemo dotnet run

Na koniec możesz zamknąć sesję serverdemo i serwer przy użyciu następującego polecenia:

dotnet-coverage shutdown serverdemo

Proces serwera tworzy zbiorczy raport pokrycia kodu dla wszystkich klientów i kończy działanie.

Oto przykład pełnych danych wyjściowych po stronie serwera:

D:\serverexample\server> dotnet-coverage collect --session-id serverdemo --server-mode
SessionId: serverdemo
// Server will be in idle state and wait for connect and shutdown commands
Code coverage results: output.coverage.
D:\serverexample\server>

Oto przykład pełnych danych wyjściowych po stronie klienta:

D:\serverexample\server> dotnet-coverage connect serverdemo ConsoleApplication.exe World
Hello World!!
D:\serverexample\server> dotnet-coverage connect serverdemo WpfApplication.exe
D:\serverexample\server> dotnet-coverage shutdown serverdemo
D:\serverexample\server>

Można również uruchomić zarówno serwer, jak i klienta w trybie w tle. Inny proces rozpoczyna się w tle i zwraca kontrolkę z powrotem do użytkownika.

Poniżej przedstawiono przykład pełnych danych wyjściowych w trybie klienta serwera w tle:

D:\serverexample\server> dotnet-coverage collect --session-id serverdemo --server-mode --background
D:\serverexample\server> dotnet-coverage connect --background serverdemo ConsoleApplication.exe World
D:\serverexample\server> dotnet-coverage connect --background serverdemo WpfApplication.exe
D:\serverexample\server> dotnet-coverage shutdown serverdemo
D:\serverexample\server>

Statyczne pokrycie kodu dla zarządzanych zestawów

Narzędzie dotnet-coverage może służyć do zbierania pokrycia kodu dla zarządzanych zestawów przy użyciu instrumentacji statycznej. Dostępne są trzy różne metody. Aby to zademonstrować, załóżmy, że mamy prostą aplikację konsolową w języku C#:

D:\examples\ConsoleApp> dotnet run
Hello, World!

Użyj polecenia collect z opcją dołączania plików lub konfiguracją

Jeśli nie chcesz używać instrument polecenia , można określić pliki do instrumentowania przy użyciu --include-files opcji w następujący sposób:

D:\examples\ConsoleApp> dotnet-coverage collect --include-files .\bin\Debug\net7.0\*.dll dotnet run
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.

SessionId: 57862ec0-e512-49a5-8b66-2804174680fc
Hello, World!
Code coverage results: output.coverage.

Można również określić pliki do instrumentowania przy użyciu konfiguracji w następujący sposób:

<ModulePaths>
  <IncludeDirectories>
    <Directory>D:\examples\ConsoleApp\bin\Debug\net7.0</Directory>
  </IncludeDirectories>
</ModulePaths>

Używanie instrumentu i zbieranie poleceń

W takim przypadku najpierw należy instrumentować dane binarne w następujący sposób:

D:\examples\ConsoleApp> dotnet-coverage instrument .\bin\Debug\net7.0\ConsoleApp.dll
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.

Input file successfully instrumented.

Następnie możesz zebrać pokrycie kodu w następujący sposób:

D:\examples\ConsoleApp> dotnet-coverage collect .\bin\Debug\net7.0\ConsoleApp.exe
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.

SessionId: a09e6bef-ff64-4b5f-8bb8-fc495ebb50ba
Hello, World!
Code coverage results: output.coverage.

Używanie instrumentu i zbieranie poleceń w trybie serwera

W takim przypadku można całkowicie oddzielić kolekcję pokrycia od uruchamiania aplikacji. Najpierw instrumentuj plik binarny w następujący sposób:

D:\examples\ConsoleApp> dotnet-coverage instrument --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 .\bin\Debug\net7.0\ConsoleApp.dll
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.

Input file successfully instrumented.

Uwaga

Identyfikator sesji musi być używany w tym scenariuszu, aby upewnić się, że aplikacja może łączyć się z zewnętrznym modułem zbierającym i dostarczać dane.

W drugim kroku należy uruchomić moduł zbierający pokrycie w następujący sposób:

D:\examples\ConsoleApp> dotnet-coverage collect --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 --server-mode
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.

SessionId: 73c34ce5-501c-4369-a4cb-04d31427d1a4

Następnie aplikację można uruchomić w następujący sposób:

D:\examples\ConsoleApp> .\bin\Debug\net7.0\ConsoleApp.exe
Hello, World!

Na koniec moduł zbierający można zamknąć w następujący sposób:

D:\examples\ConsoleApp> dotnet-coverage shutdown 73c34ce5-501c-4369-a4cb-04d31427d1a4
Microsoft (R) Code Coverage Command Line Tool (x64)
Copyright (c) Microsoft Corporation. All rights reserved.

Ustawienia

Podczas korzystania z collect polecenia można określić plik z ustawieniami. Plik ustawień może służyć do wykluczania niektórych modułów lub metod z analizy pokrycia kodu. Format jest taki sam jak konfiguracja modułu zbierającego dane w pliku runsettings . Aby uzyskać więcej informacji, zobacz Dostosowywanie analizy pokrycia kodu. Oto przykład:

<?xml version="1.0" encoding="utf-8"?>
<Configuration>
    <CodeCoverage>
        <!--
        Additional paths to search for .pdb (symbol) files. Symbols must be found for modules to be instrumented.
        If .pdb files are in the same folder as the .dll or .exe files, they are automatically found. Otherwise, specify them here.
        Note that searching for symbols increases code coverage run time. So keep this small and local.
        -->
        <SymbolSearchPaths>
            <Path>C:\Users\User\Documents\Visual Studio 2012\Projects\ProjectX\bin\Debug</Path>
            <Path>\\mybuildshare\builds\ProjectX</Path>
        </SymbolSearchPaths>

        <!--
        About include/exclude lists:
        Empty "Include" clauses imply all; empty "Exclude" clauses imply none.
        Each element in the list is a regular expression (ECMAScript syntax). See /visualstudio/ide/using-regular-expressions-in-visual-studio.
        An item must first match at least one entry in the include list to be included.
        Included items must then not match any entries in the exclude list to remain included.
        -->

        <!-- Match assembly file paths: -->
        <ModulePaths>
            <Include>
                <ModulePath>.*\.dll$</ModulePath>
                <ModulePath>.*\.exe$</ModulePath>
            </Include>
            <Exclude>
                <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
            </Exclude>
            <!-- Additional directories from .NET assemblies should be statically instrumented: -->
            <IncludeDirectories>
                <Directory Recursive="true">C:\temp</Directory>
            </IncludeDirectories>
        </ModulePaths>

        <!-- Match fully qualified names of functions: -->
        <!-- (Use "\." to delimit namespaces in C# or Visual Basic, "::" in C++.)  -->
        <Functions>
            <Exclude>
                <Function>^Fabrikam\.UnitTest\..*</Function>
                <Function>^std::.*</Function>
                <Function>^ATL::.*</Function>
                <Function>.*::__GetTestMethodInfo.*</Function>
                <Function>^Microsoft::VisualStudio::CppCodeCoverageFramework::.*</Function>
                <Function>^Microsoft::VisualStudio::CppUnitTestFramework::.*</Function>
            </Exclude>
        </Functions>

        <!-- Match attributes on any code element: -->
        <Attributes>
            <Exclude>
            <!-- Don't forget "Attribute" at the end of the name -->
                <Attribute>^System\.Diagnostics\.DebuggerHiddenAttribute$</Attribute>
                <Attribute>^System\.Diagnostics\.DebuggerNonUserCodeAttribute$</Attribute>
                <Attribute>^System\.CodeDom\.Compiler\.GeneratedCodeAttribute$</Attribute>
                <Attribute>^System\.Diagnostics\.CodeAnalysis\.ExcludeFromCodeCoverageAttribute$</Attribute>
            </Exclude>
        </Attributes>

        <!-- Match the path of the source files in which each method is defined: -->
        <Sources>
            <Exclude>
                <Source>.*\\atlmfc\\.*</Source>
                <Source>.*\\vctools\\.*</Source>
                <Source>.*\\public\\sdk\\.*</Source>
                <Source>.*\\microsoft sdks\\.*</Source>
                <Source>.*\\vc\\include\\.*</Source>
            </Exclude>
        </Sources>

        <!-- Match the company name property in the assembly: -->
        <CompanyNames>
            <Exclude>
                <CompanyName>.*microsoft.*</CompanyName>
            </Exclude>
        </CompanyNames>

        <!-- Match the public key token of a signed assembly: -->
        <PublicKeyTokens>
            <!-- Exclude Visual Studio extensions: -->
            <Exclude>
                <PublicKeyToken>^B77A5C561934E089$</PublicKeyToken>
                <PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken>
                <PublicKeyToken>^31BF3856AD364E35$</PublicKeyToken>
                <PublicKeyToken>^89845DCD8080CC91$</PublicKeyToken>
                <PublicKeyToken>^71E9BCE111E9429C$</PublicKeyToken>
                <PublicKeyToken>^8F50407C4E9E73B6$</PublicKeyToken>
                <PublicKeyToken>^E361AF139669C375$</PublicKeyToken>
            </Exclude>
        </PublicKeyTokens>

        <EnableStaticManagedInstrumentation>True</EnableStaticManagedInstrumentation>
        <EnableDynamicManagedInstrumentation>True</EnableDynamicManagedInstrumentation>

    </CodeCoverage>
</Configuration>

Scal raporty pokrycia kodu

Dane można scalić a.coverage i b.coverage przechowywać w merged.coverage następujący sposób:

dotnet-coverage merge -o merged.coverage a.coverage b.coverage

Jeśli na przykład uruchomisz polecenie takie jak dotnet test --collect "Code Coverage", raport pokrycia jest przechowywany w folderze o nazwie losowego identyfikatora GUID. Takie foldery są trudne do znalezienia i scalenia. Za pomocą tego narzędzia można scalić wszystkie raporty pokrycia kodu dla wszystkich projektów przy użyciu wzorców globbingu w następujący sposób:

dotnet-coverage merge -o merged.cobertura.xml -f cobertura **\*.coverage

Poprzednie polecenie scala wszystkie raporty pokrycia z bieżącego katalogu i wszystkich podkatalogów i zapisuje wynik w pliku cobertura. W usłudze Azure Pipelines możesz użyć zadania Publikowanie wyników pokrycia kodu, aby opublikować scalony raport cobertura.

Możesz użyć merge polecenia , aby przekonwertować raport pokrycia kodu na inny format. Na przykład następujące polecenie konwertuje raport pokrycia kodu binarnego na format XML.

dotnet-coverage merge -o output.xml -f xml input.coverage

Zobacz też