tutorial - Use el atributo para omitir el código del análisis de cobertura en Visual Studio
visual studio code pdf (3)
Tengo algunas clases que, por una razón u otra, no pueden o no necesitan ser probadas por unidad. Me gustaría excluir estas clases de mis métricas de cobertura para poder tener una mejor idea de la cobertura en las clases que realmente me importan. En este momento 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, para empezar, no se incluyan. ¿Hay alguna forma de decorar una clase con un atributo que la excluya automáticamente del análisis de cobertura? El análisis de cobertura de VS o nCover funcionará.
FWIW, estas son clases que puedo asegurarme mediante la inspección de que el código es correcto. En su mayoría, son clases de envoltorio alrededor de las clases de marco existentes que he introducido para poder burlarme de la clase de marco. Ya que los envoltorios se burlan, no se ponen a prueba. Eso está bien porque todo lo que hacen es envolver los métodos de la clase marco que me interesan.
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 { }
Usamos NAnt, por lo que tenemos un objetivo que se ve así:
<target name="unittests" description="run nunit tests" >
<ncover
....
excludeAttributes="CoverageExcludeAttribute"
/>
</target>
La pregunta 9 en las preguntas frecuentes de NCover describe este método. Basamos nuestra solución en esto.
Alternativamente, puede usar la función de exclusión del 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.
He encontrado información sobre 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 he intentado con DebuggerNonUserCodeAttribute y parece funcionar. Probablemente pueda vivir con esto durante la mayoría de las clases en las que estoy pensando, aunque no me gusta el efecto secundario de no poder ingresar a estas clases. Eso no debería ser un problema para las clases de envoltorio, pero puede terminar siendo así con clases que son intrínsecamente difíciles de probar y necesito acceso para el depurador.
Sin embargo, sigo buscando alternativas.
A partir de VS2010 tenemos ExcludeFromCodeCoverageAttribute
. Los comentaristas han notado que esto funciona en NCover así como en DotCover + NUnit. Ejemplo de uso:
[ExcludeFromCodeCoverage]
public class myUntestableClass
{ }
Véase también este link . Sugieren utilizar VSInstr como herramienta de línea de comandos, tiene opciones / EXCLUDE (no es tan práctico).