2009-08-17 13 views
15

Tengo algunas clases que, por una razón u otra, no se pueden o no se deben probar unitarias. Me gustaría excluir estas clases de mis métricas de cobertura para poder tener una mejor idea de la cobertura de las clases que realmente me interesan. Ahora mismo tengo que excluir los resultados después del hecho. Lo que me gustaría hacer es usar un atributo para marcar esas clases como excluidas para que no estén incluidas para comenzar. ¿Hay alguna manera de decorar una clase con un atributo que la excluya automáticamente del análisis de cobertura? Cualquiera de los análisis de cobertura VS o nCover funcionarán.Usar el atributo para omitir el código del análisis de cobertura en Visual Studio

FWIW, estas son clases que me puedo asegurar por inspección que el código es correcto. En su mayoría, son clases de envoltorio alrededor de las clases marco existentes que he introducido para poder simular la clase framework. Como los envoltorios son burlados, no se prueban. Está bien porque todo lo que hacen es ajustar los métodos de la clase de framework que me interesan.

+0

¿El problema es que no puede obtener datos de cobertura en métodos individuales, , por lo que desea eliminar los datos de cobertura de los métodos que no le interesan para obtener una medida más adecuada en general? –

+0

Sí. Hay algunos métodos que no necesitan ser o no pueden ser probados fácilmente: clases de contenedor creadas para permitir pruebas de unidades alrededor de las clases marco, por ejemplo. Preferiría no tener estas desorden en las estadísticas de las clases que me importan. – tvanfosson

Respuesta

22

Comenzando con VS2010 tenemos ExcludeFromCodeCoverageAttribute. Los comentaristas han notado que esto funciona tanto en NCover como en DotCover + NUnit. Ejemplo de uso:

[ExcludeFromCodeCoverage] 
public class myUntestableClass 
{ } 

También ver este link. Sugieren usar VSInstr como herramienta de línea de comandos, tiene opciones/EXCLUDE (no es tan útil).

+0

Esto también funciona con NCover en VS2010. – tvanfosson

+0

Esto también funciona con DotCover + NUnit (VS2012). – Jeroen

6

He encontrado some information en un par de atributos de Diagnóstico DebuggerNonUserCodeAttribute y DebuggerHiddenAttribute que indica que el uso de estos atributos hará que el analizador de cobertura en VS los deje fuera de sus resultados. Lo probé con DebuggerNonUserCodeAttribute y parece funcionar. Probablemente pueda vivir con esto para la mayoría de las clases en las que estoy pensando, aunque no me gusta el efecto secundario de no poder entrar en estas clases. Eso no debería ser un problema para las clases contenedoras, pero puede terminar siendo así con clases que son intrínsecamente difíciles de probar y necesito acceso a depuración.

Todavía estoy buscando alternativas, sin embargo.

+0

Esto es exactamente lo que estaba buscando. Gracias por seguir! –

5

Con NCover puede crear un atributo y luego decirle a NCover que ignore ese atributo.

En nuestros proyectos, hemos definido este atributo (sin espacio de nombres, por lo que es fácil de usar):

public class CoverageExcludeAttribute : Attribute { } 

Utilizamos Nant, así que tenemos un objetivo que tiene este aspecto:

<target name="unittests" description="run nunit tests" >   
    <ncover 
     .... 
     excludeAttributes="CoverageExcludeAttribute" 
    /> 
</target> 

La pregunta 9 en el NCover FAQ describe este método. Basamos nuestra solución en esto.

Como alternativa, puede usar la característica de exclusión de NCoverExplorer para excluir espacios de nombres y ensamblajes del informe final. Esto simplemente elimina los datos del informe, pero el resultado final es el mismo.

Utilizamos ambas técnicas.

+0

Gracias. Eso es exactamente lo que estaba buscando. Uso principalmente nCover junto con TestDriven.Net, que parece que habilita CoverageExcludeAttribute fuera de la caja. – tvanfosson

+0

La última versión funciona con el atributo ExcludeFromCodeCoverage, así que cambié para usar eso. – tvanfosson

Cuestiones relacionadas