2010-03-10 9 views

Respuesta

0

Es muy probable que haya una manera de hacer esto con una tarea de compilación (especialmente si está dispuesto a rodar la suya). Con suerte, alguien publicará un código de muestra para usted.

Si no, me ha impresionado con NDepend para este tipo de tarea. Puede escribir en una sintaxis similar a SQL muy autoexplicativa para determinar todo tipo de métricas sobre su código y advertir o fallar una compilación basada en umbrales.

Ejemplos:

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

El principal problema es que el archivo de resultados de cobertura de código que produce MSTest está en un formato binario. Sin embargo, en el supuesto de que las cosas no han cambiado demasiado en VS2010, usted debería ser capaz de utilizar esta utilidad para convertirlo en un archivo XML:

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

NOTA: Es probable que tenga que volver a compilar contra la versión VS2010 de 'Microsoft.VisualStudio.Coverage.Analysis.dll.

Puede utilizar su método preferido de análisis de ese archivo XML, haciendo los cálculos para cada uno de los ensamblajes instrumentados para calcular un índice de cobertura general. Los XPath que le interesa (al menos para VS2008) son:

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

Si usted quiere hacer el último paso en el más puro MSBuild, entonces el 'XmlRead' y las tareas 'Matemáticas' contenidas dentro de las tareas de MSBuild Comunidad biblioteca debería ser suficiente:

http://msbuildtasks.tigris.org/

vez que tenga la relación global en una propiedad de MSBuild, a continuación, sólo tiene que utilizar una tarea condicional para romper la acumulación si ese número es menor que el límite deseado.

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

Pregunta antigua, pero no está marcada como respondida. Eche un vistazo a this

Cuestiones relacionadas