After one comment of Chris Walquist on one of my last post about Team City integration of NCover here is the way I run NCover through MSBuild in Team City.

First I need to import the Task of NCover.

<ProjectToolsVersion=”3.5DefaultTargets=”Buildxmlns=”http://schemas.microsoft.com/developer/msbuild/2003“>
  <UsingTask
TaskName=”NCoverExplorer.MSBuildTasks.NCoverAssemblyFile=”$(NCoverPath)\Build Task Plugins\NCoverExplorer.MSBuildTasks.dll“ />
  <UsingTask
TaskName=”NCoverExplorer.MSBuildTasks.NCoverExplorerAssemblyFile=”$(NCoverPath)\Build Task Plugins\NCoverExplorer.MSBuildTasks.dll“ />

Then I define some properties:


$(MSBuildProjectDirectory)....
$(MSBuildProjectDirectory)....\Tests
C:\Program Files\NCover
C:\Program Files\NUnit 2.4.6\bin
TechHeadBrothers.Portal.DataAccess.Tests.dll TechHeadBrothers.Portal.DataAccess.dll
....\Tests\Output\Coverage.xml
Assembly=*.Tests
TechHeadBrothers.Portal.DataAccess;TechHeadBrothers.Portal.Domain;

Then I have two targets:

<Target Name=”FullCoverage“>
<Message
Text=”#——— Executing NCover ———#“ />
<NCover
ToolPath=”$(NCoverPath)
CommandLineExe=”$(NUnitPath)\nunit-console.exe
CommandLineArgs=”$(TestDll)
WorkingDirectory=”$(TestsFolder)\Output\bin\Debug
ProjectName=”$(ProjectName)
CoverageFile=”$(CoverageFile)
FileExclusionPatterns=”$(CoverageExclusions)
LogFile=”Coverage.log
AssemblyList=”$(CoverageAssemblies)“ />

<NCoverExplorer
ToolPath=”$(NCoverPath)
ProjectName=”$(ProjectName)
OutputDir=”$(TestsFolder)\Output
CoverageFiles=”$(CoverageFile)
SatisfactoryCoverage=”80
ReportType=”ModuleClassSummary
HtmlReportName=”CoverageSummary.html“ />

<NCoverExplorer
ToolPath=”$(NCoverPath)
ProjectName=”$(ProjectName)
OutputDir=”$(TestsFolder)\Output\Coverage
CoverageFiles=”$(CoverageFile)
SatisfactoryCoverage=”80
ReportType=”FullCoverageReport
HtmlReportName=”Coverage.html“ />

And finally in the target AfterBuild (more on that in this post) I call target SummaryCoverage or FullCoverage according to the configuration:

<Target Name=”AfterBuild“>
<CallTarget
Condition=” ‘$(Configuration)’ == ‘Staging’ Targets=”SummaryCoverageContinueOnError=”false“ />
<CallTarget
Condition=” ‘$(Configuration)’ == ‘Nightly’ Targets=”FullCoverageContinueOnError=”false“ />

That’s it!

Then Chris asked the following:

  1. How did you get your “tests” tab to show up as well?  Did you have to run the tests with NUnitLauncher, and then run again for coverage?  I read that NUnitLauncher can’t be used to profile, since it kicks off a separate process.

  2. How did you get the “classes”, “header”, “index”, etc. files?  I just get the summary.html.  I see options for this in ncover.console.exe but not in the target.

  3. Did you use wildcard expressions to pass a list of test assemblies to NCover?  If so, would like to see how you did that, too.

  1. I get the test tab configuring Team City to run my unit tests. That has nothing to do with NCover. And yes doing it so seems to run two time all unit tests. Here is a screen shot of my team city runner configuration:

  1. Read this post “Using NDepend in Team City build management tool“ that talks about for NDepend but shows configuration for NCover too.

  2. The answer is on top of this post!

Hope it helps!