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
,xml
icobertura
. Wartość domyślna tocoverage
(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
,Info
iVerbose
.
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
,xml
icobertura
. Wartość domyślna tocoverage
(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
,Info
iVerbose
.
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
,Info
iVerbose
.
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
,Info
iVerbose
.
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
,Info
iVerbose
.
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
,Info
iVerbose
.
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