Excluding Your .NET Test Project From Code Coverage
This article as a code snippet I use with my .NET test projects to be excluded them from code coverage metrics collection.
Why
I have a large solution and an extension that will give me feedback on my code coverage, well by default it will also give you the metrics. Well I do not want this done on my test projects, since I don't test my tests.
Code Snippet
And here it is, in your csproj just add this Assembly Attribute, and now your project will not have its code coverage metric tallied.
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<AssemblyAttribute Include="System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute" />
</ItemGroup>
</Project>
Bonus: Code Snippet
And here is a Bonus Snippet! I use this to simplify and consolidate all the base settings for my Test Projects. Include the code below in a Directory.Build.props
file at the root of your tests folder, where all your projects are located. The configuration includes the Assembly Attribute, from above, and all my common PackageReferences I like to use in my tests.
<Project>
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />
<PropertyGroup>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<AssemblyAttribute Include="System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AutoFixture" Version="4.17.0" />
<PackageReference Include="AutoFixture.AutoMoq" Version="4.17.0" />
<PackageReference Include="AutoFixture.Xunit2" Version="4.17.0" />
<PackageReference Include="FluentAssertions" Version="5.10.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" />
<PackageReference Include="Xunit" Version="2.4.1" />
<PackageReference Include="Xunit.Runner.Visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.msbuild" Version="2.8.1" />
<PackageReference Include="MediatR" Version="8.1.0" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="8.1.0" />
<PackageReference Include="Moq" Version="4.15.2" />
</ItemGroup>
</Project>