2011-10-04 13 views
5

Starając się zaprojektować komponenty, które są jak najbardziej możliwe do ponownego wykorzystania, musiałem ostatnio zastanowić się nad możliwością zastosowania tak zwanych "adnotacji adaptera". Rozumiem przez to zastosowanie klasycznego wzorca OO w postaci Adapter do Java. Załóżmy na przykład, że mam pakiet testów jednostkowych oparty wyłącznie na JUnit. musiałbym opisywanie wszystkich moich metod badawczych, co następuje:Adnotacje adaptera Java

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

Ale co, jeśli po utworzeniu zestawu testowego z, powiedzmy, 1000 klas testowych zdecyduję chcę rozpocząć testy jednostkowe z jakimś nowym Super -Cool ramy badania, które wymaga, aby wszystkie metody badań mają być odnotowany w następujący sposób:

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

teraz, w tym konkretnym przykładzie może być całkowicie wykonalne, aby szukać-n-zastąpić stare adnotacje na nowe, ale w aplikacji praktycznej nie byłoby to możliwe rozwiązanie.

Więc byłoby to możliwe dla mnie „wrap” moja jednostka adnotacji testowych z czymś Homegrown, jak:

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

A potem zbudować własną procesor adnotacji, które przekształcają wystąpień @HomegrownUnitTestAnnotation aby cokolwiek adnotacja Obecnie potrzebujemy (albo @Test lub @SuperCoolUnitTest(someParam="true"))?

Oczywiście to pytanie dotyczy wszystkich adnotacji, a nie tylko tych dostarczanych przez JUnit. Zasadniczo pytam, czy możliwe jest zawijanie adnotacji stron trzecich ze względu na możliwość ponownego wykorzystania/rozdzielenie spraw/etc. Z góry dziękuję!

+0

Więc "zupełnie nowy szkielet testowy" jest wymagany do zrzutu interfejsu API JUnit (podobnie jak Assert ...)? – home

+0

Istnieje wiele przypadków, w których tylko adnotacje są używane do dekoracji klas i metod, bez wywoływania wywołań API w tych metodach. Tak jak napisałem w pytaniu, nie jest to scenariusz specyficzny dla JUnit, pytam, czy możliwe jest nawet tworzenie procesorów adnotacji, które mogą mapować jeden rodzaj adnotacji na inny. – IAmYourFaja

+0

Ahhhhh bardzo ładne! Dzięki @home. Myślę, że krótka odpowiedź na moje pytanie brzmi "tak", chociaż zastanawiam się, czy istnieje sposób "czystej Javy" (nie wiosenny), aby to zrobić. Oczywiście, jeśli Spring zrobi to za pomocą meta-adnotacji, to musi być możliwe zrobienie rozwiązania wychowawczego. Jeśli zmienisz swój komentarz na odpowiedź, z chęcią sprawdzę to za Ciebie. Dzięki jeszcze raz. – IAmYourFaja

Odpowiedz