Ferramenta Microsoft.CodeCoverage.Console

Microsoft.CodeCoverage.Console é uma ferramenta de linha de comando. Você pode usá-lo para coletar a cobertura de código para código C++ e C#. Ele também dá suporte à mesclagem e conversão de relatórios de cobertura de código. Essa ferramenta pode ser usada para coletar cobertura de código em cenários que não são de teste (por exemplo, para um aplicativo de console simples).

Microsoft.CodeCoverage.Console está disponível no Visual Studio 2022 17.3 na pasta Common7\IDE\Extensions\Microsoft\CodeCoverage.Console. Você pode usá-lo em um Prompt de Comando do Desenvolvedor e um PowerShell do Desenvolvedor:

Observação

A ferramenta está disponível apenas no Visual Studio Enterprise. Para cobertura de código .NET, você pode usar a ferramenta de linha de comando, dotnet-coverage.

C:\Program Files\Microsoft Visual Studio\2022\Enterprise> Microsoft.CodeCoverage.Console --help
Description:
  Dynamic code coverage tools.

Usage:
  codecoverage [command] [options]

Options:
  --version       Show version information
  -?, -h, --help  Show help and usage information

Commands:
  collect <command> <args>            Collect code coverage from inner process and subprocesses.
  connect <session> <command> <args>  Connects to an existing code coverage session and collects code coverage from
                                      inner process and subprocesses.
  merge <files>                       Merge coverage reports
  shutdown <session>                  Close existing code coverage collection.
  snapshot <session>                  Creates coverage file for existing code coverage collection.
  instrument <input-file>             Instruments native binary.

Comandos collect, connect, shutdown, merge e snapshot

A ferramenta Microsoft.CodeCoverage.Console é a extensão para a ferramenta dotnet dotnet-coverage. A documentação para os comandos collect, connect, shutdown, merge e snapshot pode ser encontrada aqui. Além disso, a ferramenta Microsoft.CodeCoverage.Console dá suporte à coleta de cobertura de código para código C++.

Comando instrument

O comando instrument é usado para instrumentar um binário nativo ou gerenciado no disco.

Sinopse

Microsoft.CodeCoverage.Console 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>

Argumentos

  • <input-file>

    O binário de entrada.

Opções

  • -s|--settings <settings>

    Define o caminho para as configurações de cobertura de código XML.

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

    Especifica a ID da sessão de cobertura de código. Se não for fornecida, a ferramenta gerará um GUID aleatório.

  • -o|--output <output>

    Define o caminho para o binário do arquivo de saída. Se ele não for fornecido, a instrumentação será executada in-loco.

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

    Define o caminho do arquivo de log. Quando você fornece um diretório (com um separador de caminho no final), um novo arquivo de log é gerado para cada processo em análise.

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

    Define o nível do log. Os valores compatíveis são: Error, Info e Verbose.

Cobertura de código estático para código C++

A ferramenta Microsoft.CodeCoverage.Console pode ser usada para coletar cobertura de código para C++ usando instrumentação estática. Há três métodos diferentes disponíveis que você pode usar. Para demonstrar, vamos supor que temos um aplicativo de console C++ simples (vinculado à opção /PROFILE):

D:\ConsoleApplication\x64\Debug> .\ConsoleApplication.exe
Hello World!

Usando apenas o comando collect com a configuração

Se você não quiser usar o comando instrument, os arquivos a serem instrumentados precisarão ser especificados em um arquivo de configuração da seguinte maneira:

<ModulePaths>
  <IncludeDirectories>
    <Directory>D:\ConsoleApplication\x64\Debug</Directory>
  </IncludeDirectories>
</ModulePaths>

Em seguida, você pode coletar a cobertura de código da seguinte maneira:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console collect --settings coverage.config .\ConsoleApplication.exe
SessionId: 85d9d49e-38a7-43a4-81ff-9e12f0e6b04b
Hello World!
Code coverage results: output.coverage.

Uso dos comandos instrument e collect

Nesse caso, o primeiro binário precisa ser instrumentado da seguinte maneira:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console instrument ConsoleApplication.exe
Input file successfully instrumented.

Em seguida, você pode coletar a cobertura de código da seguinte maneira:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console collect .\ConsoleApplication.exe
SessionId: e85e657f-9ff3-42a0-88d7-2349598a1ecd
Hello World!
Code coverage results: output.coverage.

Usar o comando instrument e o comando collect no modo de servidor

Nesse caso, você pode separar completamente a coleta de dados de cobertura da execução de seu aplicativo. Primeiro, instrumente o binário da seguinte maneira:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console instrument --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 ConsoleApplication.exe
Input file successfully instrumented.

Observação

A ID da sessão precisa ser usada nesse cenário para garantir que o aplicativo possa se conectar e fornecer dados ao coletor externo.

Na segunda etapa, você precisa iniciar o coletor de cobertura da seguinte maneira:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console collect --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 --server-mode
SessionId: 73c34ce5-501c-4369-a4cb-04d31427d1a4

Em seguida, o aplicativo pode ser iniciado da seguinte maneira:

D:\ConsoleApplication\x64\Debug>.\ConsoleApplication.exe
Hello World!

Observação

O binário nativo instrumentado contém uma referência a static_covrun64.dll. Verifique se esse arquivo está ao lado do binário instrumentado ou do diretório em que static_covrun64.dll está localizado está listado na variável de ambiente Path. Os comandos collect e connect estão adicionando automaticamente diretórios adequados a Path.

Por fim, o coletor pode ser fechado da seguinte maneira:

D:\ConsoleApplication\x64\Debug>Microsoft.CodeCoverage.Console shutdown 73c34ce5-501c-4369-a4cb-04d31427d1a4