2013-04-08 2 views
5

Mam aspekt spring aop i ma on następującą metodę: jest to aspekt, który zostanie wywołany przed określoną metodą.Jednostkowe przypadki testowe dla aspektu sprężynowego przez podanie punktu połączenia?

public void someMethod(JoinPoint jp) { 
     //Somelogic 
    } 

Potrzebuję napisać do tego celu przypadek testowy. jak mogę utworzyć instancję i wysłać parametry do someMethod? mam na myśli, jak mogę wypełnić JoinPoint z args? jak ustawić parametry we wspólnym punkcie i przekazać je? aspekt jest skonfigurowany w pliku xml kontekstu aplikacji.

Dzięki!

Odpowiedz

5

myślę, że masz kilka dobrych opcji tutaj ...

  1. JoinPoint jest interfejsem. Z tego powodu powinieneś być w stanie stworzyć własną implementację kodu pośredniczącego, której zachowanie się oczekuje. W swoim teście, stwórz nową instancję tego kodu pośredniczącego i przekaż go do metody someMethod.
  2. Użyj trybu szyderczego, aby sfałszować obiekt JoinPoint i skonfigurować oczekiwane zachowania na próbce. Może to brzmieć nieco obco, jeśli nie znasz ogólnie szyderczych frameworków, więc polecam przyjrzenie się tej dokumentacji pod adresem Mockito, która jest popularną szydercą.

Kiedy przychodzi do testów jednostkowych, najlepszych praktyk (kopalnia przynajmniej) sugeruje, że test powinien zawsze używać mock/niedopałek jakiegoś (dla członków i przekazywane parametry), aby upewnić się, że test jednostka jest testowanie tylko jednostka. Jeśli było użyć realizację JoinPoint który używa Wiosna/AspectJ, to może być także testowanie jakąś logikę ich realizacji w testu jednostkowej. Jeśli te szczegóły dotyczące implementacji ulegną zmianie w przyszłości, test może zostać przerwany bez żadnych zmian kodu.

0

Doszedłem do tego i odkryłem, że najprostszym sposobem na zrobienie tego jest stworzenie "fałszywych metod", do których aspekt powinien się przyzwyczaić, wtedy możesz po prostu wywołać te metody w twoich testach i zrobić twierdzenia przeciw temu, co aspekt robi .

Kpiny z JoinPoint są trudne i bardzo czasochłonne, ponieważ zazwyczaj chcesz uzyskać dostęp do wielu natywnych rzeczy, takich jak obiekty odbicia, które są zadeklarowane jako ostateczne, a co za tym idzie, skomplikowane.