views:

275

answers:

3

Hi,

Background: Visual Studio 2008, C#, .Net 3.5.

I have a number of utility classes that are simply not unit-testable. This is mainly because they interact with resources (e.g. databases, files etc).

Is there a way I can decorate these classes so that the Visual Studio Code Coverage engine will ignore them, so not decreasing the code coverage percentage?

+1  A: 

One of the reason you want to write unit-tests is to make your code loosely coupled. You can read this article if you're interested in learning how to write loosely coupled code (in case you don't know how).

Saying that you can try to use tools like TypeMock that can help you mock your objects even if you don't write them using Dependency Injection principle.

TypeMock was the first Mock Framework I used. I switch to Rhino Mocks because with TypeMock I didn't have to be discipline enough to write loosely coupled code.

Vadim
We write very good, loosely coupled code; but at some point, something has to actually access a resource!
Chris Arnold
You create wrappers for these resources and use wrappers in your production code instead of resources itself. Check the link in my answer.
Vadim
+4  A: 

There is an answer in this article about how to use [System.Diagnostics.DebuggerHidden] or [System.Diagnostics.DebuggerNonUserCode] Attributes to exclude methods from code coverage.

John K
A point of caution (from the above article) - "DebuggerHidden will prevent you from stepping into the method or setting breakpoints in that code and DebuggerNonUserCode will hide the code as (sic) debug time and automatically step over it."
RaceFace
+2  A: 

When you upgrade your project to .NET 4, you'll get the ExcludeFromCodeCoverageAttribute Class.

brickner
Ooh, I like that!
Chris Arnold