2011-07-23 7 views
5

el fin de reducir la duplicación de código quisiera generar pruebas de unidad mediante programación de varias fuentes. Una forma sencilla de lo que podía pensar era generar un montón de delegados desde el interior de un método que analiza la información de configuración y las etiquetas de todos los delegados con el atributo [TestMethod] que luego se ejecuta por el marco de pruebas de Visual Studio.Volviendo # delegados C en la unidad de tests

Mi motivación es utilizar la mayor cantidad posible de las instalaciones de informes de pruebas del estudio visual porque podría escribir mi propia capa de informes para las pruebas utilizando algunas de las facilidades de reflexión de C#, pero prefiero no hacerlo. Mi solución parece bastante elegante y simple, pero no puedo obtener el marco de prueba de Visual Studio para entender exactamente qué estoy tratando de hacer, ¿alguien sabe cómo hacer lo que me gustaría?

+0

Creo que es la mejor práctica para mantener todos los datos relevantes para la prueba de la unidad en el archivo de la prueba es definido en - ¿no te preocupa que esto pueda oscurecer el propósito de las pruebas? –

+0

La información de configuración estará junto a las pruebas para que no sea difícil seguir lo que están haciendo las pruebas. – davidk01

+0

Entonces tal vez se puede lograr usando el atributo [TestCase] ​​(http://www.nunit.org/index.php?p=testCase&r=2.5.9) –

Respuesta

1

Es posible que desee considerar Pex (y posiblemente Moles para código heredado) de Microsoft Research. Pex es un proyecto de investigación que genera automáticamente pruebas unitarias con una alta cobertura de código y, supuestamente, selecciona entradas y salidas interesantes para las pruebas. Supongo que hay algo de inteligencia allí. :)

No lo he usado personalmente, pero he escuchado de algunos colegas que Pex y Moles son muy interesantes y les han ayudado. Puede valer la pena mirar.

Espero que esto ayude!

1

Creo que si realmente quieres generar pruebas, sería mejor que literalmente generaras las pruebas, usando algo como T4 templates. En otras palabras, use la generación de código y cree los accesorios de prueba y los métodos para que los ejecute como lo haría con cualquier otro caso de prueba.

0

Lo siento si esto no responde a usted pregunta exactamente, pero creo que las pruebas de unidad de generación automática es la forma equivocada de abordar este problema.
Las pruebas unitarias son una forma efectiva de ayudar a evitar la regresión y proporcionar documentación sobre cómo debe usarse su código. Cuando generas automáticamente tus pruebas obtienes un montón de pruebas, pero si fallan, no sabes realmente si existe una falla real y terminas con muchas pruebas fallidas que no tienes idea de por qué fallan o cómo hacerlas. pasar. Al final, probablemente borre todas las pruebas, porque "no funcionan".

Dicho esto - probar Armadillo de Typemock - es una herramienta que escribe las pruebas de acuerdo con las acciones del usuario

+0

Todo el mundo sigue planteando este punto, pero no tiene ningún sentido. El objetivo de las pruebas es eliminar errores y proporcionar documentación y generar pruebas a partir de archivos de configuración que muestren claramente qué tan buenas son las entradas y salidas. Nadie parpadea cuando los mapeadores ORM se utilizan para generar automáticamente andamios para el acceso a la base de datos, pero todos siguen llorando por generar casos de prueba a partir de varios archivos de configuración. – davidk01

+0

No es exactamente lo mismo: ¿usa ORM como documentación? las pruebas sin lógica detrás de ellas son "pruebas de humo" válidas que pueden o no ser buenas para su proyecto, pero no reemplazan las antiguas pruebas escritas a mano que realmente prueban la lógica y no solo establecen -> establecer -> obtener –