2008-09-17 21 views
11

¿Cuál es la mejor herramienta, preferiblemente gratuita/de código abierto para la autogeneración de pruebas unitarias de Java? Lo sé, las pruebas unitarias no pueden cumplir realmente el mismo propósito que las pruebas unitarias TDD normales que documentan e impulsan el diseño del sistema. Sin embargo, las pruebas unitarias autogeneradas pueden ser útiles si tiene una gran base de código heredada y desea saber si los cambios que debe realizar tendrán efectos secundarios indeseados y poco claros.Pruebas unitarias de generación automática para el código Java heredado

Respuesta

4

No es gratis. No de código abierto. Pero he encontrado AgitarOne agitador (http://www.agitar.com/solutions/products/agitarone.html) a ser muy bueno para la generación automática de pruebas unitarias y en busca de efectos secundarios no deseados oscuros

+0

Me encantaría ver una implementación de código abierto de algo así como Agitar: es el tipo de cosas para las que el código abierto debería ser realmente bueno. – Vihung

3

Para ser honesto, probablemente no haría esto. Las pruebas unitarias están aisladas y no sabrás si tienes "efectos secundarios no deseados, oscuros" porque todo está separado de otras cosas que causan los efectos secundarios. Como resultado, necesita integración o prueba del sistema y que no es algo que pueda automatizar.

Elabore unas pocas pruebas de sistema de extremo a extremo de alto nivel que le den un grado de confianza y luego use pruebas de cobertura para descubrir lo que se ha perdido. La desventaja es que cuando aparezcan errores, lo hará será más difícil señalar su causa exacta, pero lo bueno es que será mucho más probable que vea los errores.

Una vez que encuentre errores, escriba pruebas unitarias solo para ellos. A medida que avance, puede usar TDD para los bits que desea refactorizar.

Sé que esto probablemente no era la respuesta que desea escuchar, pero yo he estado probando durante muchos, muchos años y este es un enfoque sólido (aunque yo casi no llamarlo el único enfoque :)

+0

como complemento a este enfoque Recomiendo leer http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf (PDF de advertencia) y esto http://www-128.ibm.com/developerworks/java/library/j-legacytest.html No creo que realmente quiera autogenerar las pruebas – Jean

3

Es interesante, pero tales pruebas unitarias generados en realidad puede ser útil. Si está trabajando en una aplicación heredada, a menudo será difícil escribir las pruebas de unidad de última generación correctas.

Tales pruebas generados (si usted tiene una forma de generar ellos, por supuesto), entonces puede asegurarse que el comportamiento del código permanece intacto durante los cambios, que pueden ayudarle a refactorizar el código y escribir mejores pruebas.

Ahora sobre se autogenera. No conozco ninguna herramienta mágica, pero es posible que desee buscar la funcionalidad de JUnit para incluir algunas pruebas en javadocs de métodos. Esto te permitiría escribir algunas pruebas simples. Y sí, en realidad tiene algún valor.

En segundo lugar, puede escribir pruebas "grandes" a mano. Por supuesto, estas no serían pruebas unitarias per se (sin aislamiento, posibles efectos secundarios, etc.), pero podría ser un buen primer paso. Especialmente si tiene poco tiempo y una aplicación heredada.

Bonus Tip! Existe un excelente libro "Trabajar eficazmente con código heredado" con ejemplos en Java, incluidas las técnicas correctas para usar en tales situaciones. Desafortunadamente, tendrías que hacer algunas cosas manualmente, pero tendrías que hacer eso en algún momento de todos modos.

3

El plugin Coview para Eclipse (http://www.codign.com/products.html) se ve solo en el trabajo. Estoy interesado en generar pruebas que cubran todos los caminos en el código, y esto parece hacerlo. También genera los simulacros que deberían ahorrarme toneladas de tiempo.

Cuestiones relacionadas