Wie kann ich einen Build fehlschlagen lassen, wenn die Codeabdeckung unter einem bestimmten Schwellenwert liegt?TFS 2010 RC: Wie kann ein Build für eine niedrige Codeabdeckung fehlschlagen?
Antwort
Es gibt sehr wahrscheinlich eine Möglichkeit, dies mit einer Build-Aufgabe zu tun (vor allem, wenn Sie bereit sind, Ihre eigenen zu rollen). Hoffentlich wird jemand einen Beispielcode für Sie veröffentlichen.
Wenn nicht, war ich mit NDepend für diese Art von Aufgabe beeindruckt. Sie können in einer sehr selbsterklärenden, SQL-ähnlichen Syntax schreiben, um alle Arten von Metriken zu Ihrem Code zu ermitteln und ein Build basierend auf Schwellenwerten zu warnen oder fehlzuschlagen.
Beispiele:
WARN IF Count > 0 IN SELECT METHODS WHERE CodeWasChanged AND PercentageCoverage < 95
WARN IF Count > 0 IN SELECT METHODS WHERE IsPublic AND IsInOlderBuild AND WasRemoved
Das Hauptproblem ist, dass die Code-Coverage-Ergebnisse Datei, die MSTest ist in einem binären Format erzeugt. Jedoch davon aus, dass die Dinge nicht zu viel in VS2010 geändert, sollten Sie in der Lage sein, dieses Dienstprogramm zu verwenden, um es in eine XML-Datei zu konvertieren:
http://codeexperiment.com/file.axd?file=2008%2f9%2fCodeCoverageConverter.zip
Hinweis: Sie werden wahrscheinlich neu kompilieren müssen, um es gegen die VS2010-Version von 'Microsoft.VisualStudio.Coverage.Analysis.dll.
Sie können dann Ihre bevorzugte Methode zum Parsen dieser XML-Datei verwenden, indem Sie die Berechnungen für jede der instrumentierten Assemblys durchführen, um ein Gesamtüberdeckungsverhältnis zu berechnen. Die XPaths Sie interessiert sind (zumindest für VS2008) sind:
/CoverageDSPriv/Module/LinesCovered
/CoverageDSPriv/Module/LinesNotCovered
Wenn Sie diesen letzten Schritt in reinen MSBuild tun wollen, dann ist die ‚XMLRead‘ und ‚Math‘ Aufgaben im Rahmen der MSBuild Community-Aufgaben enthalten Bibliothek sollte ausreichend sein:
http://msbuildtasks.tigris.org/
Sobald Sie das Gesamtverhältnis in einer MSBuild Eigenschaft haben, können Sie dann einfach eine bedingte Aufgabe verwenden, um die Build zu brechen, wenn diese Zahl niedriger ist als die gewünschte Schwelle ist.
<Error Condition=" $(CodeCoverageRatio) < $(MinCodeCoverage) "
Text="Code Coverage is below required threshold." />
Alte Frage, aber nicht als beantwortet markiert. Werfen Sie einen Blick auf this