Estaba hoy “jugando” con las builds de Visual Studio Team Services, quería ver la cobertura de código que tenía después de ejecutar mis tests… es sencillo, tan solo hay que activar un check en la configuración de la build para que la ejecución capture la cobertura.
Supongo que sabéis que una vez que VSTS os muestra el resultado de la build, incluyendo la cobertura, podemos descargar dicha cobertura para realizar un análisis más en profundidad en nuestro Visual Studio
Abriendo el archivo en Visual Studio me llevé una desagradable “sorpresa:
Podéis ver como la cobertura está teniendo en cuenta 3 asemblies que en principio no deberían estar ahí, ya que son dependencias a través de paquetes NuGet. Qué demonios, ¡Yo sólo quiero ver la cobertura de mi código!
Lo primero, entender la causa: ¿Por qué pasa esto?
Parece que por defecto VSTS va a tratar de analizar la cobertura de todo assembly para el cual tenga símbolos. Buscando en mi carpeta packages, o en mi bin, efectivamente, los assemblies “malignos” tienen además de su dll un bonito archivo .pdb, es decir símbolos. Parece que VSTS hace bien su trabajo L
No quiero entrar en la discusión ahora mismo, eso daría para un post entero pero el caso es que hay paquetes que lo hacen, incluyen símbolos, aunque la recomendación parece ser tener dos paquetes, el “normal” sin símbolos, y el que incluye símbolos, por si se necesitan….
Aquí vais a encontrar información:
· https://github.com/elastic/elasticsearch-net/issues/436
· https://docs.microsoft.com/es-es/nuget/create-packages/symbol-packages
En cualquier caso, si no lo remediamos vamos a “ensuciar” nuestros datos de code coverage, ha
¿Que podemos hacer?
De momento solo he encontrado un modo, mediante el uso de un archivo de tipo .runsettings, en el que podamos excluir ciertos elementos de la cobertura. En este caso vamos a excluir los 3 assemblies:
Podéis ver aquí documentación oficial, hay opciones para incluir y excluir assemblies, funciones y atributos
¿Cómo lo uso en visual studio? Tan solo debo seleccionar el archivo, en la siguiente imagen indico como se hace. A partir de ese momento el archivo “aplicará” siempre que lo tengamos marcado, como se ve en la imagen anterior
Parece que está funcionando, ya no vemos assemblies externos, pero vemos el assembly de tests, y este tampoco lo queremos. Aquí debemos jugar con los atributos, hay que modificar nuestro fichero para que también excluya el atributo [ExcludeFromCodeCoverage] con el que decoramos nuestras clases de tests (https://msdn.microsoft.com/en-us/library/system.diagnostics.codeanalysis.excludefromcodecoverageattribute(v=vs.110).aspx)
Mis clases de tests son así:
Ya tenemos todo lo necesario entonces, ¿cómo lo llevamos a VSTS? Pues bien, debemos subir el fichero a nuestro control de código fuente de modo que VSTS lo pueda encontrar. Además, hay que indicar en la build, en el paso de ejecución de tests, que utilice dicho fichero
Una vez hecho esto podemos lanzar una nueva build y ver que la cobertura de código ya solo incluye lo que queremos.
Objetivo cumplido, aquí podéis descargar mi fichero .runsettings
Espero que os sea de utilidad.
No hay comentarios:
Publicar un comentario