2011-04-12 11 views
54

Tengo un proyecto existente de C# 4 para el que he comprobado la cobertura de la prueba al utilizar TestDriven.Net y la función de cobertura de Visual Studio, es decir, Probar con -> Cobertura en el menú contextual.¿Cómo excluyo los tipos y métodos de ser cubierto por dotCover en TeamCity?

El proyecto contiene algún código que no quiero que se cubra, y lo he resuelto agregando el [ExcludeFromCodeCoverage] para esos tipos y métodos.

Acabamos de actualizar TeamCity a 6.0.3, y he agregado la cobertura dotCover al paso de compilación NUnit.

He logrado eliminar la cobertura de ensamblajes externos como NHibernate en la sección "Filtros" (estableciendo explícitamente los ensamblados para los que quiero cobertura), pero estoy luchando con la forma de excluir tipos y métodos de cubierto. asambleas.

enter image description here

Respuesta

60

Ok, Martin, ¡lo descubrí! Sólo tomó una hora de meter al azar en la sintaxis de filtros ... cuando la documentación dice para añadir un filtro como éste

+:myassembly=*;type=*;method=*** 

que realmente quieren decir esto ... donde cualquier cosa en <> se sustituye totalmente por usted y cualquier cosa lo demás es un literal

+:<myassembly>;type=<filter>;method=<filter> 

Por lo tanto, el filtro que quería era incluir un único conjunto (a partir de un puñado de asambleas) y luego excluir a unos espacios de nombres en esa asamblea. Escribí

+:Omnyx.Scanner 
-:Omnyx.Scanner;type=Omnyx.Scanner.Simulation.* 
-:Omnyx.Scanner;type=Omnyx.Scanner.ToolsCommon.* 
+8

Después de navegar a través de la fuente de dotCover (con dotPeek, naturalmente), he logrado averiguar cómo se especifican varios filtros en la ** línea de comando **. Usted ** separa los filtros ** con ';' y un filtro puede ser un filtro de ensamblaje, un filtro de tipo ** o ** un filtro de método. Entonces para incluir AssemblyA pero excluir tipos en el espacio de nombres de AssemblyA.Blah: '+: AssemblyA; -: type = AssemblyA.Blah. *' – bruceboughton

+0

@bruceboughton ¿Cómo hiciste que dotPeek viera la fuente de dotCover? Me moría de ganas de escribir una herramienta F # que controla el directorio actual usando un filtro de ensamblaje de argumentos de línea de comando y muestra la lista de ensamblajes excluidos/incluidos y esto haría realidad mi sueño. –

2

Tome un vistazo a la página dotCover Tips & Tricks. Parece que puede configurar exclusiones en la sección Filtros, de forma similar a cómo excluyó ensamblajes completos.

Digamos que desea ignorar un método llamado DoStuff contenido en una clase MyStuff, que se encuentra en la biblioteca MyAwesomeAssembly. A continuación, el código XML dotCover debería ser algo como esto:

<Filters> 
    <ExcludeFilters> 
    <FilterEntry> 
     <ModuleMask>MyAwesomeAssembly</ModuleMask> 
     <ClassMask>MyStuff</ClassMask> 
     <FunctionMask>DoStuff</FunctionMask> 
    </FilterEntry> 
    </ExcludeFilters> 
</Filters> 

responsabilidad: No consumo dotCover, así que no estoy 100% seguro de si esto va a funcionar.

+0

Adam, gracias por su contribución. Como se indicó en la pregunta, me gustaría utilizar la sección "Filtros" del paso de compilación en TeamCity. Solo recurriré a la configuración XML si es la última opción (¿y cómo se usan archivos de configuración dotCover XML con TeamCity?). –

+0

@Martin Ah, lo siento, he entendido mal lo que quería decir. Parece que Stealf cubrió lo que necesitas en su respuesta. Espero que ayude. :) –

+0

ModuleMask, ClassMask y FunctionMask deben ser atributos, no elementos. Además, se deben especificar los nombres completos de espacio de nombres en cada máscara.También descubrí que puede modificar fácilmente el archivo de VS utilizando el menú dotCover -> Editar filtros de cobertura .... –

0

Esto es lo que la documentación TeamCity dice acerca de las opciones de filtro:

Especificar asambleas para perfilar una por línea usando sintaxis siguiente: +: MyAssembly = ; type =; method = *

Use -: myassembly para excluir un ensamblaje de la cobertura del código. El comodín Asterisk (*) es compatible aquí.

+1

He leído los documentos, pero no puedo hacerlo funcionar. Una muestra de trabajo sería genial. –

Cuestiones relacionadas