If you have done any node.js development and have been required to hit code coverage marks prior to check in or CI/CD builds; you probably have used a tool like istanbul to check your percentages.
image from instabul.js.org
Getting code coverage reports on the command line for .NET Core has been a gap, and unless you are using Visual Studio Test or a 3rd party pay for play; getting this information was still only Windows only.
Using the quick test example on the docs site: Unit testing C# with MSTest and .NET Core. I created the project(s), added the coverlet NuGet package and ran
Create the solution and projects.
# create the solution file dotnet new sln -n testing-coverlet # create the class library project dotnet new classlib -n PrimeService # create the mstest project dotnet new mstest -n PrimeService.Tests # add the projects to the solution file dotnet sln add **/**/*.csproj # add the reference to the classib project cd PrimeService.Tests dotnet add reference ../PrimeService/PrimeService.csproj
Copy the code examples from the docs.
To add coverlet, it is just a NuGet package. So, just like any other we can add it to the PrimeServices.Tests project.
dotnet add package coverlet.msbuild
And because it integrates directly with
dotnet test there is no other work to do. Just run
dotnet test and pass the parameter
/p:CollectCoverage=true to enable the output.
And we get the output:
Build completed. Test run for /PrimeService.Tests/bin/Debug/netcoreapp2.0/PrimeService.Tests.d ll(.NETCoreApp,Version=v2.0) Microsoft (R) Test Execution Command Line Tool Version 15.3.0-preview-20170628-02 Copyright (c) Microsoft Corporation. All rights reserved. Starting test execution, please wait... Total tests: 5. Passed: 5. Failed: 0. Skipped: 0. Test Run Successful. Test execution time: 0.8314 Seconds Calculating coverage result... Generating report '/PrimeService.Tests/coverage.json' +--------------+----------+ | Module | Coverage | +--------------+----------+ | PrimeService | 66% | +--------------+----------+
My full example available here on Github