Coverage con PartCover en un servidor de CI

Objetivo

Como segunda parte del post de Integración Continua (CI) vamos a ver como tener una medición de coverage automatizada en un servidor donde podamos consultar el resultado (y los resultados anteriores).
Por ejemplo:
Coverage
Esto lo logramos combinando MSBuild, PartCover y CruiseControl.NET

Ejecutando PartCover desde una tarea de MSBuild

véase el Target Coverage en: http://code.google.com/p/dmsneluz/source/browse/trunk/src/dms.msbuild
Podemos ver que primero definimos las líneas del archivo de configuración, luego escribimos el archivo de configuración para PartCover utilizando la tarea WriteLinesToFile, determinamos el nombre del archivo de reporte y finalmente ejecutamos PartCover con los parámetros indicados.

Configurar CruiseControl.NET

Aquí tenemos dos partes, ejecutar la tarea y visualizar los resultados.
Ejecutar tarea de msbuild:
véase: http://code.google.com/p/dmsneluz/source/browse/trunk/ccnet/server/config/dms/dms.coverage.xml
las líneas mas relevantes de este archivo donde ejecutamos el msbuild con target Coverage que nos relaciona con el párrafo anterior:
<targets>Coverage</targets>
Y donde incluimos del archivo de resultado del coverage al reporte de cruisecontrol:
<merge><files><file>c:\cruisecontrol\dms\Coverage\Reports\coverage.report.xml</file></files></merge>
Visualizar el resultado en el sitio web de cc.net
véase “Coverage per Assembly” y “Coverage per Type” en: http://code.google.com/p/dmsneluz/source/browse/trunk/ccnet/webdashboard/dashboard.config
ahí estamos incluyendo los reportes a nivel de Build Report.
<xslReportBuildPlugin description="Coverage per Assembly" actionName="PartCoverPerClassReport" xslFileName="xsl\PartCover.assembly.report.xsl" />
<xslReportBuildPlugin description="Coverage per Type" actionName="PartCoverReport" xslFileName="xsl\PartCover.class.report.xsl" />

Aclaraciones

  • Los archivos xsl no vienen incluidos en la instalación default de cc.net, los mismo los podés encontrar en http://code.google.com/p/dmsneluz/source/browse/trunk/ccnet/webdashboard/xls (también hay otras versiones en internet, haz tu evaluación).
  • En la carpeta ccnet intenté respetar la estructura de carpetas de CruiseControl.NET y puse solo los archivos modificados, pueden compararlos con los originales para ver las diferencias.
  • Entre los archivos del repositorio pueden encontrar uno llamado Coverage.bat, este ejecuta la tarea de MSBuild sin necesidad de un servidor de integración continua.