2010-09-21 13 views
8

De vez en cuando estoy buscando algún código, busco los usos de un método (usando el reajuste) y encuentro que solo se llama mediante pruebas. Entonces es efectivamente redundante y puedo eliminarlo y los métodos que lo llaman.Cómo encontrar el código que solo se llama mediante las pruebas

Obviamente, no tiene sentido tener un código sin usar en el lugar, ralentizando la compilación y la ejecución de prueba. Lo que me gustaría es una herramienta que pueda decirme dónde están todos los bits del código de producción a los que solo se accede mediante pruebas.

Tengo una versión completa de resharper, y también una versión de prueba de NDepend, pero no he descubierto cómo usar cualquiera de estos para obtener el resultado que quiero (sin tener que pagar por ello). Sospecho que es posible con la versión completa de NDepend, pero ¿hay otras herramientas que la gente conozca?

Si el contexto ayuda, la solución es el sitio web ASP.net, cuya mayor parte de la funcionalidad es manejada por un servicio WCF. Entonces, los únicos puntos de entrada válidos al grueso del código son los métodos de servicio. Las pruebas están en sus propios proyectos separados.

¡He comenzado una recompensa porque estoy seguro de que alguien más debe haber tenido y haber resuelto este problema antes!

+1

Parte del código solo de prueba es probable burlas, talones, etc ... – CaffGeek

+0

@Chad todos los simulacros, talones, etc. están en mis proyectos de prueba. En esta pregunta, estoy más preocupado por el código de producción. –

Respuesta

4

Buscar manualmente con NDepend debería funcionar con Dependency Matrix. Allí puede ver qué métodos utilizan solo los Ensambles de prueba de unidades.

No estoy seguro de si puede escribir sus propias consultas CQL con la versión de prueba. Pero con la versión Pro se puede utilizar una consulta como esta:

SELECT METHODS WHERE IsUsedBy "ASSEMBLY:NAME_OF_THE_UNIT_TEST_ASSEMBLY" 
AND !(IsUsedBy "ASSEMBLY:NAME_OF_ANOTHER_ASSEMBLY" OR IsUsedBy "ASSEMBLY:ANOTHER_NAME") 

Para que esto funcione hay que crear un proyecto NDepend que conoce todas sus asambleas.

Para NAME_OF_THE_UNIT_TEST_ASSEMBLY tiene que insertar su conjunto de prueba de unidad y en la segunda parte debe especificar los ensamblajes de código de producción con IsUsedBy y separados con OR.

+0

Por lo que puedo ver, necesito la versión completa para poder ejecutar consultas personalizadas. Estoy buscando hacer una regla FxCop personalizada a lo largo de las líneas de su consulta (mucho más difícil en FxCop ...) –

+2

Sería genial si pudiera publicar la regla – Noffls

0

Puedes usar NDepend con algunas consultas personalizadas ... Eso está fuera de mi cabeza, nunca lo usé exactamente para eso, pero debería funcionar.

+0

He investigado eso, y parece que probablemente tendré que obtener la versión de pago para poder agregar mis propias consultas. –

2

Un enfoque no técnico sería eliminar temporalmente el proyecto de prueba de su solución, luego usar el análisis de código de Visual Studio (o FxCop) para localizar cualquier método que no sea invocado por otra cosa.

+0

El problema con el uso de FxCop es que ignora los métodos públicos cuando está buscando un código muerto, y sé que muchas de las cosas que trato de encontrar aquí son métodos públicos –

Cuestiones relacionadas