Cobertura de Código

A cobertura de código pode ser usada para monitorar quantos dos muitos caminhos de código que o programa emprega estão sendo realmente exercitados.

Para mais informações veja Perfil.

MonoCov

O MonoCov é composto por dois componentes: Um módulo de cobertura de código e uma GUI (interface gráfica) para fazer a cobertura de código. Isto está disponível como parte do pacote “monocov” (diponível aqui).

Para usá-lo, execute o comando dessa forma:

   mono --debug --profile=monocov program.exe

A informação de cobertura será a saída para o arquivo program.exe.cov. Agora você pode carregar esse arquivo na GUI com o comando:

   monocov program.exe.cov

e procurar os namespaces de tipos que você deseja verificar para a cobertura de código. Clicando duas vezes sobre um método, trará uma tela com o arquivo de origem do método com as linhas de código, as linhas não atingidas pela execução estão destacadas em vermelho.

Para limitar a coleta de dados de um conjunto específico, você pode especificá-lo como um argumento para o profiler. Por exemplo, considerar apenas o código em mscorlib, use:

   mono --debug --profile=monocov:+[mscorlib] test-suite.exe

Para ser capaz de coletar facilmente informações de cobertura dos testes de unidade no diretório mcs do mono, você também pode executar o teste da seguinte forma, por exemplo mcs/class/corlib:

   make run-test RUNTIME_FLAGS="--profile=monocov:outfile=corlib.cov,+[mscorlib]"

Para usar opções semelhantes durante a execução de testes de unidade diretamente com nunit-console2, especifique MONO_OPTIONS da seguinte forma:

   MONO_OPTIONS="--profile=monocov:+[MyAssembly]" nunit-console2 MyTestAssembly.dll

O Monocov também pode gerar um conjunto de páginas HTML que mostram os dados da cobertura. Aqui são os arquivos gerados durante a execução do conjunto de testes baseados em nunit para a mscorlib do mono com o seguinte comando:

    monocov --export-html=/tmp/corlib-cov corlib.cov

Esperamos que esta ferramenta ajude os novos colaboradores e os antigos a encontrarem facilmente os pontos não testados em nossas bibliotecas e contribuir com testes para eles.

Cobertura de Código Integrada

O módulo integrado de cobertura de código é bastante limitado

O Mono já vem com um módulo integrado de cobertura de código. Este módulo é ativado usando a opção Mono –profile = cov. O formato é:

--profile=cov[:assembly-name[/namespace]] test-suite.exe

Por padrão, o código de cobertura estará operando sobre todas as assemblys carregadas, você pode limitar isso especificando o nome da assembly, por exemplo, para realizar a cobertura de código nas rotinas de uso do seu programa, a seguinte linha de comando limita a cobertura de código para rotinas na assembly “demo”

        mono --profile=cov:demo demo.exe

Observe que o nome da assembly não inclui a extensão.

Você pode restringir ainda mais a saída de cobertura de código, especificando um espaço de nomes:

        mono --profile=cov:demo/My.Utilities demo.exe

Nesse caso só será realizada a cobertura de código nas classes dentro espaço de nomes especificado.

A saída típica se parece com:

    Not covered: Class:.ctor ()
    Not covered: Class:A ()
    Not covered: Driver:.ctor ()
    Not covered: Driver:method ()
	Partial coverage: Driver:Main ()
		offset 0x000a

Os deslocamentos (offset) exibidos são deslocamentos IL.