2011-10-04 21 views
5

En un esfuerzo por diseñar componentes que sean lo más reutilizables posible, comencé a pensar recientemente sobre la posibilidad de las llamadas "anotaciones de adaptador". Con esto me refiero a la aplicación del clásico patrón OO Adapter a las anotaciones de Java. Entonces, por ejemplo, digamos que tengo un conjunto de pruebas unitarias que está basado enteramente en JUnit. Yo tendría que anotar todos mis métodos de prueba de la siguiente manera:Anotaciones de Java Adapter

public class WidgetTest 
{ 
    @Test 
    public void test_WidgetConstructor() 
    { 
     // ... 
    } 
} 

Pero lo que si, después de la creación de un banco de pruebas con, digamos, 1000 clases de prueba, decido que quiero para comenzar las pruebas unitarias con algún nuevo súper -Cool marco de pruebas que requiere que todos los métodos de prueba que se adjuntará la siguiente nota:

public class WidgetTest 
{ 
    @SuperCoolUnitTest(someParam="true") 
    public void test_WidgetConstructor() 
    { 
     // ... 
    } 
} 

Ahora, en este ejemplo particular, se podría ser perfectamente factible buscar-n-reemplazar las antiguas anotaciones para los nuevos, pero en una aplicación práctica, esta no sería una solución viable.

Así sería posible para mí "envolver" mis anotaciones de prueba de unidad con algo de cosecha propia, como:

public class WidgetTest 
{ 
    @HomegrownUnitTestAnnotation 
    public void test_WidgetConstructor() 
    { 
     // ... 
    } 
} 

y luego construir mi propio procesador de anotación que convertiría a instancias de @HomegrownUnitTestAnnotation a cualquier anotación que actualmente necesito (¿@Test o @SuperCoolUnitTest(someParam="true"))?

Obviamente, esta pregunta se aplica a todas las anotaciones, no solo a las proporcionadas por JUnit. Básicamente, estoy preguntando si es posible incluir anotaciones de terceros en aras de la reutilización/separación de inquietudes/etc. ¡Gracias por adelantado!

+0

Entonces, ¿se requiere el 'nuevo marco de prueba' para volcar la API JUnit (como Assert ...) también? – home

+0

Hay muchos casos en los que solo se usan anotaciones para decorar clases y métodos, sin que se invoca ninguna llamada API dentro de esos métodos. Como dije en la pregunta, este no es un escenario específico para JUnit, estoy preguntando si es posible incluso crear procesadores de anotación que puedan asignar un tipo de anotación a otra. – IAmYourFaja

+0

Ahhhhh muy bien! Gracias @home. Supongo que la respuesta corta a mi pregunta es "sí", aunque me pregunto si hay una forma de "Java puro" (no de primavera) para hacer esto. Obviamente, sin embargo, si Spring lo hace con estas meta-anotaciones, entonces debe ser posible hacer una solución interna. Si cambias tu comentario a una respuesta, lo comprobaré felizmente. Gracias de nuevo. – IAmYourFaja

Respuesta