Analisando a cobertura de testes em aplicações .NET com o OpenCover \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 18 Horas 

 49 Min 

 12 Seg 

   Tempo restante da oferta: 18 49 12 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Analisando a cobertura de testes em aplicações .NET com o OpenCover  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

# Analisando a cobertura de testes em aplicações .NET com o OpenCover

 Conheça o OpenCover, ferramenta open-source para análise de cobertura de testes.

 [ Wladimilson M. Nascimento ](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento) 9 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/10/06103451/cobertura-codigos-testes-automatizados.jpg)  

Quem trabalha com .NET geralmente utiliza o Visual Studio e, hoje, uma das deficiências de algumas versões desta ferramenta é a funcionalidade de avaliar a cobertura dos testes. Recurso este que encontra-se disponível apenas na versão Enterprise, e ele acaba não sendo utilizado na hora da implementação dos testes unitários.

Dependendo do tamanho da aplicação, não ter uma boa ferramenta de cobertura de teste pode dificultar e muito a análise das partes que ainda precisam ser testadas.

Para facilitar este processo para quem não possui a versão Enterprise do Visual Studio, temos a opção de utilizar o OpenCover, que é uma ferramenta open-source.

[  ![C# - Entity Framework Core ORM](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/c-sharp.svg)   Curso C# - Entity Framework Core ORM Conhecer o curso ](https://www.treinaweb.com.br/curso/c-sharp-entity-framework-core-orm)

## OpenCover

Como dito acima, o [**OpenCover**](https://github.com/OpenCover/opencover) é uma ferramenta open-source, que gera a cobertura de testes em projetos .NET. Infelizmente no momento ele só funciona no Windows, e não suporta projetos .NET Core.

Mesmo sendo uma ferramenta de linha de comando, ela pode ser baixada pelo NutGet ou como um arquivo MSI ou zip na página do projeto [Github](https://github.com/opencover/opencover/releases).

Para testá-la, criei um projeto simples, que possui apenas classe:

```csharp
public class Exemplo
{
    public static void Metodo()
    {
        try
        {
            Console.WriteLine("Ok!");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

```

E um projeto de teste também com apenas uma classe:

```csharp
using NUnit.Framework;

[TestFixture]
public class ExemploTest
{
    [Test]
    public void MetodoTest()
    {
        Exemplo.Metodo();
    }
}

```

## Executando os testes com o OpenCover

O OpenCover não executa diretamente os testes, na verdade, ele precisa de outra aplicação que executa o teste, que no nosso caso será o NUnit.

Como o OpenCover irá executar o NUnit pelo console, também adcione na aplicação o [NUnit Console](http://nunit.org/docs/2.4/nunit-console.html).

Com isso, poderemos executar o comando abaixo:

```sh
C:ProjetosTreinawebTreinaweb.CalculadorapackagesOpenCover.4.6.519toolsOpenCover.Console.exe -target:"C:ProjetosTreinawebTreinaweb.CalculadorapackagesNUnit.ConsoleRunner.3.7.0toolsnunit3-console.exe" -targetargs:"C:ProjetosTreinawebTreinaweb.CalculadoraTreinaweb.Calculadora.TestsbinDebugTreinaweb.Calculadora.Tests.dll" -output:"C:ProjetosTestResultscoverage.xml" -register:user

```

Os argumentos utilizados acima são:

- **target:** - Indica o processo que OpenCover irá executar.
- **targetargs:** - Informa argumentos para o processo que o OpenCover irá executar. No caso, é passado a dll do projeto que contém os testes;
- **output:** - O local onde o arquivo xml gerado será salvo;
- **register:user** - Utilizado para registrar objetos COM que o OpenCover utiliza. A opções `user` deve ser utilizada por usuários sem privilégios administrativos.

Você pode ver outros comandos, na documentação do OpenCover [aqui](https://github.com/opencover/opencover/wiki/Usage).

Ao executar o código acima, o OpenCover irá gerar um arquivo XML como resultado. Para visualizar este resultado em um ambiente mais amigável, pode ser utilizado o [ReportGenerator](https://github.com/danielpalme/ReportGenerator).

## ReportGenerator

Assim como o OpenCover, o ReportGenerator também é uma ferramenta de linha de comando open source, que pode ser baixada pelo NuGet. Ao baixá-la, pode ser executado o comando abaixo para gerar o relatório:

```sh
C:ProjetosTreinawebTreinaweb.CalculadorapackagesReportGenerator.3.0.2toolsReportGenerator.exe -reports:"C:ProjetosTestResultscoverage.xml" -targetdir:"C:ProjetosTestResultsReport"

```

Neste relatório podemos visualizar quais trechos de código não são cobertos:

![Relatório do Report Generator](https://dkrn4sk0rn31v.cloudfront.net/2017/10/30172802/ReportGenerator-Result.png)

## Conclusão

Agora o projeto tem *code coverage* e histórico, tudo com ferramentas open source. Com isso, é possível enxergar os pontos mais críticos que precisam de testes, entender a complexidade do código escrito com as métricas disponíveis e acompanhar a evolução do projeto.

Essas ferramentas facilitam muito a vida de quem desenvolve software, e é ótimo ver que a comunidade .NET está criando ferramentas open-source para resolver esses problemas.

Utilizar o [Cake](https://www.treinaweb.com.br/blog/automatizando-tarefas-de-um-projeto-csharp-com-o-cake/ "Cake") facilita ainda mais o uso e a integração delas, pra que você não precise perder muito tempo com isso e possa focar no que importa.

[  ![C# - Entity Framework Core ORM](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/c-sharp.svg)   Curso C# - Entity Framework Core ORM Conhecer o curso ](https://www.treinaweb.com.br/curso/c-sharp-entity-framework-core-orm)

- [ #C ](https://www.treinaweb.com.br/blog/tag/c)
- [ #Testes unitários ](https://www.treinaweb.com.br/blog/tag/testes-unitarios)
- [ #OpenCover ](https://www.treinaweb.com.br/blog/tag/opencover)
- [ #ReportGenerator ](https://www.treinaweb.com.br/blog/tag/reportgenerator)
- [ #NUnit ](https://www.treinaweb.com.br/blog/tag/nunit)

Autor

 ![Wladimilson M. Nascimento](//secure.gravatar.com/avatar/f0dd442f156a3eacd2880e9cd0eafbd1?d=mm)

## Wladimilson M. Nascimento

 Instrutor, nerd, cinéfilo e desenvolvedor nas horas vagas. Graduado em Ciências da Computação pela Universidade Metodista de São Paulo. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/background-post-400x280.jpg)  [ Algoritmos ](https://www.treinaweb.com.br/blog/categoria/algoritmos) 

     10 anos atrás

    ##  [ Complexidade ciclomática, análise estática e refatoração ](https://www.treinaweb.com.br/blog/complexidade-ciclomatica-analise-estatica-e-refatoracao) 

     Veremos nesse artigo como se dá a mensuração da complexidade ciclomática; como os analisadores estáticos podem nos auxiliar e a importância da refatoração.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/11/CICLO-TESTE-400x280.png)  [ Testes e Projetos ](https://www.treinaweb.com.br/blog/categoria/testes-e-projetos) 

     6 anos atrás

    ##  [ Quais são as etapas do Ciclo de Vida de Testes de Software? ](https://www.treinaweb.com.br/blog/quais-sao-as-etapas-do-ciclo-de-vida-de-testes-de-software) 

     Confira neste artigo quais são as etapas do Ciclo de Vida de Testes de Software e entenda sua importância.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/06/03131718/DIAGNÓSTICO-400x280.png)  [ Infraestrutura e Sistemas Operacionais ](https://www.treinaweb.com.br/blog/categoria/infraestrutura-e-sistemas-operacionais) 

     8 anos atrás

    ##  [ Diagnosticando uma aplicação no .NET Core 3.0 ](https://www.treinaweb.com.br/blog/diagnosticando-uma-aplicacao-no-net-core-3-0) 

     Conheça as ferramentas dotnet-counters, dotnet-trace e dotnet-dump. E aprenda como elas auxiliam no diagnóstico de uma aplicação .NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/04/23151327/PARALISIA-ANÁLISE-400x280.png)  [ Carreira ](https://www.treinaweb.com.br/blog/categoria/carreira) 

     8 anos atrás

    ##  [ Paralisia por Análise - o bloqueio que te impede de começar ](https://www.treinaweb.com.br/blog/paralisia-por-analise-o-bloqueio-que-te-impede-de-comecar) 

     Conheça o que é Paralisia por Análise, a razão de várias pessoas não começarem ou finalizarem algo, seja na vida pessoal ou profissional.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/09/TAILWIND-CSS-400x280.jpg)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     4 anos atrás

    ##  [ O que é Tailwind CSS e como instalar via CDN? ](https://www.treinaweb.com.br/blog/o-que-e-tailwind-css-e-como-instalar-via-cdn) 

     Neste artigo aprenderemos a criar um navbar usando Tailwind CSS, e entender melhor como funciona seus componentes de estilização.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/01/conhecendo-o-spring-data-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     5 anos atrás

    ##  [ Conhecendo o projeto Spring Data ](https://www.treinaweb.com.br/blog/conhecendo-o-projeto-spring-data) 

     Nesse artigo vamos conhecer o projeto Spring Data, veremos qual o objetivo desse projeto e entender como o mesmo funciona.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/CONHECENDO-VÁRIAVEIS-CONSTANTES-JAVASCRIPT-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     6 anos atrás

    ##  [ Conhecendo variáveis e constantes no JavaScript ](https://www.treinaweb.com.br/blog/conhecendo-variaveis-e-constantes-no-javascript) 

     Neste artigo vamos aprender a declarar e a utilizar constantes e variáveis no JavaScript, entendendo quando definir var, let e const.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/10/deploy-asp-net-core-linux-nginx-400x280.png)  [ ASP .NET ](https://www.treinaweb.com.br/blog/categoria/asp-net) 

     6 anos atrás

    ##  [ Publicando uma aplicação ASP.NET Core no Linux com o Nginx ](https://www.treinaweb.com.br/blog/publicando-uma-aplicacao-asp-net-core-no-linux-com-o-nginx) 

     Veja todo o processo de publicação de deploy de uma aplicação ASP.NET Core no Linux utilizando o Nginx.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/09/soft-skills-o-que-as-empresas-buscam-400x280.png)  [ Carreira ](https://www.treinaweb.com.br/blog/categoria/carreira) 

     6 anos atrás

    ##  [ Soft Skills - O que as empresas buscam? ](https://www.treinaweb.com.br/blog/soft-skills-o-que-as-empresas-buscam) 

     Confira neste artigo as 5 soft skills mais valorizadas no mercado atualmente, segundo o LinkedIn.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/06/condicional-if-else-no-php-aprenda-suas-caracteristicas-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Condicional IF Else no PHP. Aprenda suas características! ](https://www.treinaweb.com.br/blog/condicional-if-else-no-php-aprenda-suas-caracteristicas) 

     Aprenda como trabalhar com condicional if else no php, as principais características dessa estrutura de decisão para a linguagem e as recomendações da PSR12.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/08201308/BIxBD-400x280.png)  [ Tecnologia ](https://www.treinaweb.com.br/blog/categoria/tecnologia) 

     7 anos atrás

    ##  [ Business Intelligence x Big Data: quais as diferenças? ](https://www.treinaweb.com.br/blog/business-intelligence-x-big-data-quais-as-diferencas) 

     Confira neste artigo as diferenças de Business Intelligence e Big Data.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/Magento-VS-WooCommerce-400x280.jpg)  [ Magento ](https://www.treinaweb.com.br/blog/categoria/magento) 

     10 anos atrás

    ##  [ E-commerce: Magento vs WooCommerce ](https://www.treinaweb.com.br/blog/e-commerce-magento-vs-woocommerce) 

     Nesse artigo veremos uma comparação sobre duas das plataformas de comércio eletrônico mais utilizadas do mercado: Magento e WooCommerce.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **18h 49min 12s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
