2009-06-24 9 views
5

¿Hay alguna manera de hacer que prueben las pruebas de unidad solo para las clases de java que compila? Por ejemplo, si MyClass.java está desactualizado, hormiga construirá MyClass.class. Después de eso, quiero que también ejecute MyClassTest y MyClassTestSuite si existen. No tiene que estar basado en una convención de nomenclatura. Estaré bien con el uso de anotaciones o cualquier otro método que funcione.¿Cómo puedo ejecutar pruebas unitarias solo para los archivos fuente que han cambiado?

EDITAR: Varias personas han dicho que es una mala idea. Es sería ser, si planificaba registrarme sin ejecutar todas nuestras pruebas unitarias. Mi proyecto principal tiene más de 16k de pruebas unitarias que tardan unos 20 minutos en ejecutarse. Los ejecutaré todos antes del check-in, pero es completamente impráctico ejecutar todo el paquete cada vez que cambio un archivo. Lo siento, debería haber dado más contexto.

Respuesta

4

No es tan fácil ...

Tome un vistazo a Atlassian Clover. Tiene la característica que sueñas, pero no es gratis.

6

No recomendaría este enfoque. Existe una gran posibilidad de que falten errores introducidos por los efectos secundarios.

3

Tome un vistazo a Infinitest, es un plugin para Eclipse (y IntelliJ) que se ejecuta pruebas basadas en los archivos de origen que acaba de cambiar:

Infinitest Website

Para una visión general ver el screencast aquí:

Screencast Overview

+0

Infinitest es increíble. No codificaría sin eso. Es la única razón por la que no me estoy cambiando a NetBeans –

+0

El enlace del screencast está roto - Lo encontré aquí: http://improvingworks.com/products/infinitest/ –

4

Me parece una mala idea. Seguro que los archivos fuente cambiados necesitan pruebas, pero también cualquier archivo que dependa de esos archivos, y cualquiera que dependa de ellos, etc. Tendría que rastrear qué archivo depende de qué otros archivos, y ese es un problema bastante grande para resolver.

En mi opinión, si el proyecto es lo suficientemente grande como para que haya una ganancia significativa al tratar de resolver los árboles de prueba dependientes, ¿tal vez el proyecto es demasiado grande? Tal vez es hora de dividirlo en proyectos separados que trabajen juntos, que cada uno podría probarse uno para el otro.

0

Me gustaría hablar con otras personas que han dicho que esto es algo que desea evitar. Ejecutar solo los casos de prueba para las clases específicas que han cambiado introduce el riesgo de que realice un cambio que rompa una prueba para una clase que no se modificó pero que tiene una dependencia en parte del código que se modificó.

Este es un riesgo incluso si eres agresivo al programar una interfaz y burlar dependencias en pruebas unitarias. Por ejemplo, las clases de utilidad estática probablemente tengan muchas clases usándolas directamente. Aquí, sería fácil imaginar un caso en el que pudiera hacer un cambio en un método de utilidad estático, asegurarse de que las pruebas para ese método funcionaran, y romper una tonelada de código que llamaba al método si no ejecutaba todos sus pruebas.

3

No sé de qué manera hacer esto con ANT, pero puede hacer algo como esto en Eclipse.

Kent Beck ha escrito un plugin de Eclipse llamado JUnit Max que ejecuta las pruebas de su unidad después de guardar su código. Ejecuta las pruebas "con mayor probabilidad de error" primero.

JUnit Max

+0

MaxCore prefiere las pruebas nuevas a las pruebas antiguas, pruebas rápidas las pruebas y las pruebas que fallaron recientemente a las pruebas que duraron fallaron hace mucho tiempo. – Jon

0

Bueno, probablemente podría hacerlo utilizando variables, si sigue una convención de nomenclatura. Obtenga una lista de los archivos modificados y ejecute las pruebas correspondientes. Pero recomendaría no hacerlo, como explican las otras respuestas.

Cuestiones relacionadas