Open
Description
I am attempting to run code coverage on a .NET Framework 4.7.2 application using vstest.console.exe
, but when I run the tests from the command line, the tests themselves pass but a coverage report is not generated.
My test project file looks like this:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<DebugType>full</DebugType>
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="FluentAssertions" Version="5.10.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>
and if I run the following command from the solution root folder then all tests pass:
> vstest.console.exe MyProject.Tests\bin\Debug\net472\MyProject.Tests.dll
VSTest version 17.13.0 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
NUnit Adapter 3.17.0.0: Test execution started
Running all tests in C:\work\MyProject.Tests\bin\Debug\net472\MyProject.Tests.dll
All good so far; however, if I then change the command to run code coverage:
> vstest.console.exe MyProject.Tests\bin\Debug\net472\MyProject.Tests.dll /EnableCodeCoverage
VSTest version 17.13.0 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
Data collection : Unable to find a datacollector with friendly name 'Code Coverage'.
Data collection : Could not find data collector 'Code Coverage'
NUnit Adapter 3.17.0.0: Test execution started
So I then go and create CodeCoverage.runsettings
as follows:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Configuration>
<CodeCoverage>
<ModulePaths>
<Exclude>
<ModulePath>.*FluentValidation.*</ModulePath>
<ModulePath>.*NUnit3.*</ModulePath>
</Exclude>
</ModulePaths>
<UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
<AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
<CollectFromChildProcesses>True</CollectFromChildProcesses>
<CollectAspDotNet>False</CollectAspDotNet>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
and run my new command:
> vstest.console.exe MyProject.Tests\bin\Debug\net472\MyProject.Tests.dll /EnableCodeCoverage /Settings:CodeCoverage.runsettings
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
Data collection : Unable to find a datacollector with friendly name 'Code Coverage'.
Data collection : Could not find data collector 'Code Coverage'
NUnit Adapter 3.17.0.0: Test execution started
so no change at all, whether or not I specify the .runsettings
file.
How can I get coverage to run? Should I be referencing coverlet.collector
at all, or is that .NET Core-only assembly?
Metadata
Metadata
Assignees
Labels
No labels