This post is part of a series chronicling my search for a .NET coverage tool.
I tried NCover 220.127.116.1137.
NCover Complete is $479 plus $179 for a 1-year subscription (which gives free version updates). I thought this was a little steep. NCover Classic is $199/$99. I looked at NCover Complete, because that's the kind of trial version they give out. Also, the feature set for Classic was too similar to that offered by other tools that cost less. Check out the feature comparison, if you like.
I haven't had enough problems to really stress the support network, but I will say this - the NCover chaps are really keen on keeping in touch with people who have trial copies of the program. I've received 3 separate e-mails from my assigned NCover rep in the 2 weeks since I first installed my trial copy. I replied to one of these, asking for a clarification on the VS integration (see below), and got a speedy response. It's nice to see such a high level of customer support, but I do feel just a little bit smothered…
The best advice from the NCover folks is to create an external tool to launch NCover. That's an okay solution if you want to run all the unit tests in a project and profile them, but it lacks flexibility. Then to actually look at the report, you have to launch the NCover Explorer and load the report.
There's additional advice at the end of the Running NCover from Visual Studio video - if you want a more integrated Visual Studio experience, you should obtain TestDriven.Net. That probably works well enough, but I'm not wild about paying an additional $189 per head (roughly) for a test runner that (in my opinion, and excepting the NCover integration of course) is a less robust solution than the one that comes bundled with ReSharper.
Oh. There's one more feature that I found - once you are examining a coverage report, you can
Edit in VS.NET, which opens the appropriate file in Visual Studio. This is somewhat convenient, but doesn't warp you to the correct line, which is a bit of a letdown.
Command Line Execution
The command line offers many and varied options for configuring the coverage run. Here's a sample invocation:
NCover.Console.exe //exclude-assemblies BookFinder.Tests //xml ..\..\coverage.nccover nunit-console.exe bin\debug\BookFinder.Tests.dll
Upon execution, NCover tells me this:
/noshadow argument to the NUnit command line to ensure NCover can gather coverage data.
To prevent this behavior, use the
I really like that it defaults to passing the recommended
/noshadow to NUnit. The
// switches are also a good touch - it makes providing arguments to the executable being covered a lot easier. These features make the command line invocation the best I've seen among coverage tools.
The GUI runner looks just like a GUI wrapper on top of the command line options - they appear to support the same level of configuration. After the tests have been run, the NCoverExplorer allows one to browse the results and to save a report as XML or HTML.
Reports are generated either from the GUI runner or by using the NCover.Reporting executable, which has a plethora of options for choosing XML or HTML reports of various flavours. XML reports contain all the information you might want to summarize for inclusion in build output, but they're hard to understand. Witness:
<stats acp="95" afp="80" abp="95" acc="20" ccavg="1.5" ccmax="5" ex="0" ei="1" ubp="12" ul="40" um="10" usp="39" vbp="63" vl="89" vsp="105" mvc="18" vc="2" vm="22" svc="120">
If you stare at this long enough (and correlate with a matching HTML report), you figure out that this means that there are
- 39 unvisited sequence points, and
- 105 visited sequence points
along with various other stats, so using attribute extraction and Math, we could see that 105/144 or 72.9% of the sequence points are covered.
It's odd that there are many more reports available for HTML than XML. Notably absent from the XML offering: "Summary". What is it about summaries that make them unsuitable for rendering as XML when HTML is fine?
Reports of Auto-Deploy
My Support Guy explained that you can xcopy deploy NCover using the
//reg flag, but I did not find any documentation on how to do this. Support Guy claims there is an "honour system" kind of licensing model that supports this, but the trial copy I had did not work this way. I eventually abandoned this line of investigation.
Mature Isolator Support
From Visual Studio, under the Typemock menu, configure Typemock Isolator to Link with NCover&nsbsp;3.0.
When using the
TypeMockStart MSBuild task, use
<TypeMockStart Link="NCover3.0" ProfilerLaunchedFirst="true">
and it just works, assuming you have TypeMock Isolator installed or set to auto-deploy.
IIS coverage is available, simply by selecting it from the GUI runner options or from the command line using the
//iis switch. Other Windows Services can be covered in the same manner. Note though, that these features are only available in the Complete flavour of NCover 3.0.
Sequence Point coverage
Supported, as well as branch point coverage and other metrics, including cyclomatic complexity. Nice options to have, although probably a little advanced for my team's current needs and experience.
- sequence point and branch coverage
- large feature set, including trends, cyclomatic complexity analysis, and much much more
- commercial product with strong support
- report merging
- easy IIS profiling
- supports Isolator
- weak IDE integration
- inconsistent (comparing XML to HTML) report offerings
- confusing auto-deploy
I expected to be blown away by NCover—from all reports, it's the Cadillac of .NET coverage tools. After demoing it, I figured I'd end up desperately trying to make a case to the Money Guy to shell out hundreds of dollars per developer (and build server), but this did not happen. While NCover definitely has lots of features, it's lacking some pretty important ones as well, notably IDE integration. Other features just weren't as I expected - the cornucopia of report types is impressive, but overkill for a team just starting out, and many of the report types aren't available in XML and/or are very minor variations on other report types. Ultimately, I don't see what NCover offers to justify its price tag, especially across a large team. If ever I felt a need to have one of the specialized report, I'd consider obtaining a single license for tactical use, but I can't imagine any more than that.