https://github.com/coverlet-coverage/coverlet
https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-code-coverage
Primeiros passos com o framework de cobertura de código por testes unitários.
Com o VS 2019, ao criar um “projeto” de teste unitário com MSTest, o pacote coverlet.collector é incluído automaticamente.
Então, basta executar o seguinte comando no package manager console:
dotnet test --collect:"XPlat Code Coverage"
O resultado é a geração de arquivos XML com dados de cobertura em subdiretórios dos “projetos” de testes unitários.
Neste arquivo, o que devo ver? Esta ainda é a primeira vez que usei, então é uma resposta imatura, mas vamos lá.
A primeira tag:
<coverage line-rate=”0.1595″ branch-rate=”0.2727″ version=”1.9″ timestamp=”1594815785″ lines-covered=”154″ lines-valid=”965″ branches-covered=”24″ branches-valid=”88″>
Ou seja, está mostrando que:
(1) line-rate=”0.1595″ => apenas 15,95% das linhas foram executadas nos testes.
(2) lines-covered=”154″ lines-valid=”965″ => mesma informação, mas em termos absolutos, ou seja, 154 de 965 das linhas executáveis foram realmente executadas nos testes.
(3) branch-rate=”0.2727″ => apenas 27,27% das caminhos possíveis do código foram executados.
(4) branches-covered=”24″ branches-valid=”88″ => mesma informação, mas em termos absolutos, ou seja, 24 de 88 caminhos possíveis do código foram realmente executados nos testes.
A seguir, vêm os detalhes destas estatísticas discrimnadas por classe, mostrando todas as linhas e indicando se foram executadas ou não.
As informações são organizadas por classe, método e linha.
O mais interessante são as tags line com hits=”0″. Exemplo:
<line number=”96″ hits=”0″ branch=”False” />
Preste atenção nestas linhas, pois indicam o que ainda falta testar.
Um caso clássico é um if. Exemplo:
if(this.MyProperty == someValue)
DoSomething(); //hits > 0
else
DoAnotherThing(); //hits = 0
Ou seja, falta um teste em que this.MyProperty != someValue.
Finalmente, para visualizar o resultado de uma forma mais amigável (e muito interessante), é necessário um gerador de relatório. Então, instale o pacote, gere o relatório e abra-o no navegador:
dotnet tool install -g dotnet-reportgenerator-globaltool
reportgenerator
"-reports:Path\To\TestProject\TestResults\{guid}\coverage.cobertura.xml"
"-targetdir:coveragereport"
-reporttypes:Html
Mas o que seria realmente espetacular seria isto integrado visualmente dentro do VisualStudio. Talvez já exista isso, vamos ver.