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ę!
Więc "zupełnie nowy szkielet testowy" jest wymagany do zrzutu interfejsu API JUnit (podobnie jak Assert ...)? – home
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
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