2010-03-10 4 views

Répondre

0

Il y a très probablement un moyen de faire cela avec une tâche de construction (en particulier si vous êtes prêt à rouler les vôtres). J'espère que quelqu'un publiera un exemple de code pour vous.

Sinon, j'ai été impressionné par NDepend pour ce type de tâche. Vous pouvez écrire une syntaxe très explicite, de type SQL, pour déterminer toutes sortes de métriques sur votre code et avertir ou échouer une construction basée sur des seuils.

Exemples:

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 
2

Le principal problème est que le fichier de résultats de couverture de code qui MSTest produit est dans un format binaire. Cependant, en supposant que les choses ont pas changé trop VS2010, vous devriez être en mesure d'utiliser cet utilitaire pour le convertir en un fichier XML:

http://codeexperiment.com/file.axd?file=2008%2f9%2fCodeCoverageConverter.zip

REMARQUE: Vous aurez probablement besoin de recompiler contre la version VS2010 de Microsoft.VisualStudio.Coverage.Analysis.dll.

Vous pouvez ensuite utiliser votre méthode préférée d'analyse de ce fichier XML, en effectuant les calculs pour chacun des assemblages instrumentés afin de calculer un taux de couverture global. Les XPath qui vous intéressent (au moins pour VS2008) sont:

/CoverageDSPriv/Module/LinesCovered 
/CoverageDSPriv/Module/LinesNotCovered 

Si vous voulez faire cette dernière étape dans MSBuild pur, le « XMLLit » et tâches « Math » contenus dans les tâches communautaires MSBuild bibliothèque devrait être suffisante:

http://msbuildtasks.tigris.org/

une fois que vous avez le ratio global dans une propriété MSBuild, vous alors utilisez simplement une tâche conditionnelle pour briser la construction si ce nombre est inférieur à seuil désiré.

<Error Condition=" $(CodeCoverageRatio) &lt; $(MinCodeCoverage) " 
     Text="Code Coverage is below required threshold." /> 
0

Ancienne question, mais non marquée comme réponse. Jetez un oeil à this

Questions connexes