2009-08-17 5 views
15

Ich habe einige Klassen, die aus dem einen oder anderen Grund nicht getestet werden können oder müssen. Ich möchte diese Klassen von meinen Deckungsmetriken ausschließen, damit ich ein besseres Gefühl für die Berichterstattung über die Klassen bekommen kann, die mir wirklich wichtig sind. Gerade jetzt muss ich die Ergebnisse nach der Tat ausschließen. Was ich tun möchte, ist ein Attribut zu verwenden, um diese Klassen als ausgeschlossen zu markieren, so dass sie nicht von Anfang an enthalten sind. Gibt es eine Möglichkeit, eine Klasse mit einem Attribut zu dekorieren, das sie automatisch von der Coverage-Analyse ausschließt? Entweder VS Coverage Analyse oder nCover funktioniert.Attribut verwenden, um Code aus der Coverage-Analyse in Visual Studio zu entfernen

FWIW, das sind Klassen, denen ich durch Überprüfung versichern kann, dass der Code korrekt ist. Meistens handelt es sich um Wrapper-Klassen um bestehende Framework-Klassen, die ich eingeführt habe, um die Framework-Klasse herauszuspielen. Da der Wrapper ausgebremst wird, werden sie nicht getestet. Das ist in Ordnung, weil sie nur die Methoden der Framework-Klasse umschließen, die mir wichtig sind.

+0

Ist das Problem, dass Sie Coverage-Daten für einzelne Methoden nicht erhalten können, , so dass Sie Coverage-Daten von Methoden entfernen möchten, die Sie nicht interessieren, um mehr geeignete Maßnahme für das Ganze zu bekommen? –

+0

Ja. Es gibt einige Methoden, die nicht einfach getestet werden müssen oder nicht - Wrapperklassen, die zum Beispiel für Unit-Tests um Framework-Klassen herum erstellt werden. Ich würde es vorziehen, die Statistiken für die Klassen, die mir wichtig sind, nicht durcheinander zu bringen. – tvanfosson

Antwort

22

Beginnend mit VS2010 haben wir ExcludeFromCodeCoverageAttribute. Kommentatoren haben festgestellt, dass dies sowohl in NCover als auch in DotCover + NUnit funktioniert. Beispielverwendung:

[ExcludeFromCodeCoverage] 
public class myUntestableClass 
{ } 

Siehe auch link. Sie schlagen vor, VSNnstr als Befehlszeilenwerkzeug zu verwenden, es hat Optionen/EXCLUDE (es ist nicht so praktisch).

+0

Dies funktioniert mit NCover auch in VS2010. – tvanfosson

+0

Dies funktioniert auch mit DotCover + NUnit (VS2012). – Jeroen

6

Ich habe some information auf ein paar Diagnoseattribute DebuggerNonUserCodeAttribute und DebuggerHiddenAttribute gefunden, die anzeigen, dass die Verwendung dieser Attribute dazu führt, dass der Coverage Analyzer in VS diese aus seinen Ergebnissen herausläßt. Ich habe es mit dem DebuggerNonUserCodeAttribute versucht und es scheint zu funktionieren. Ich kann damit wahrscheinlich für die meisten Klassen leben, an die ich denke, obwohl ich den Nebeneffekt nicht mag, dass ich nicht in diese Klassen eintreten kann. Das sollte kein Problem für die Wrapper-Klassen sein, aber es kann am Ende so sein mit Klassen, die von Natur aus schwer zu testen sind und auf die ich Debugger-Zugriff benötige.

Ich bin immer noch auf der Suche nach Alternativen.

+0

Genau das habe ich gesucht. Danke für das Nachschlagen! –

5

Mit NCover können Sie ein Attribut erstellen und dann NCover sagen, dieses Attribut zu ignorieren.

In unseren Projekten haben wir dieses Attribut definiert (kein Namensraum, so ist es einfach zu bedienen):

public class CoverageExcludeAttribute : Attribute { } 

Wir NAnt verwenden, so haben wir ein Ziel, das wie folgt aussieht:

<target name="unittests" description="run nunit tests" >   
    <ncover 
     .... 
     excludeAttributes="CoverageExcludeAttribute" 
    /> 
</target> 

Frage 9 in der NCover FAQ beschreibt diese Methode. Darauf haben wir unsere Lösung aufgebaut.

Alternativ können Sie die Exclude-Funktion des NCoverExplorer verwenden, um Namespaces und Assemblies vom endgültigen Bericht auszuschließen. Dies entfernt lediglich die Daten aus dem Bericht, aber das Endergebnis ist das gleiche.

Wir verwenden beide Techniken.

+0

Danke. Genau das habe ich gesucht. Ich verwende meistens nCover in Verbindung mit TestDriven.Net, das aussieht, als ob es das CoverageExcludeAttribute out of the box aktiviert. – tvanfosson

+0

Die neueste Version funktioniert mit dem ExcludeFromCodeCoverage-Attribut, also habe ich diese Option verwendet. – tvanfosson