Metody statyczne, testowanie, a wrappowanie kontekstowych staticow do klas wstrzykiwanych

Odpowiedz Nowy wątek
2014-12-18 23:45
Niebieski66
0

Witam,
Od jakiegoś czasu testuje jednostkowo. Mój zestaw technologiczny to JUnit i Mockito. Często w testowaniu przeszkadzają mi metody statyczne (np. gdy chcę zmockować coś z FacesContext, w celu zbadania interakacji, gdy wystąpią pewne specyficzne warunki, a metoda musi posiadać jakąś logikę). Często wywołuje to np. NullPointerException.

Rozwiązuje to najczęściej przez tworzenie toolkitów (wstrzykiwanych przez Dependency Injection), które wrappują statyczne metody (np. warunkowy redirect lub wysłanie komunikatu o błędzie). Dzięki temu mogę wytestować moją logikę (np. warunkową interakcję w zależności od warunków), przez zmockowanie kontekstu (i test na prawdziwym obiekcie, który używa mocka wstrzykniętego obiektu wrappującego statyczny kontekst).

Czy tworzenie toolkitów wrappujących metody statyczne, wstrzykiwanych przez IoC to coś złego? Moim zdaniem używanie PowerMock to przekombinowywanie skoro można sobie stworzyć łatwo testowalny toolkit przez zamknięcie staticów w Dependency Injection (chodzi tu raczej o verify, czyli warunkową interakcję, bo nie ma sensu testować kontekstu jednostkowo, co najwyżej bardzo rzadko, integracyjnie).

Jakie jest Wasze zdanie na ten temat?

Pozostało 580 znaków

2014-12-19 00:46
0

Jakoś radzić sobie trzeba. A skoro nie chcesz PowerMock...

Pozostało 580 znaków

2014-12-19 08:43
1

Moim zdaniem powinieneś pozbyć się metod statycznych - używanie ich jest tylko wtedy, gdy one są samodzielnymi funkcjami. Ja bym na twoim miejscu zanalizował i przerobił kod tak by był testowalny.


"Chodzenie po wodzie i tworzenie oprogramowania wg specyfikacji są łatwe, o ile woda i specyfikacja są zamrożone" - Edward V. Berard

Pozostało 580 znaków

2014-12-19 11:23
Niebieski66
0
Madaoo napisał(a):

Moim zdaniem powinieneś pozbyć się metod statycznych - używanie ich jest tylko wtedy, gdy one są samodzielnymi funkcjami. Ja bym na twoim miejscu zanalizował i przerobił kod tak by był testowalny.

Tak właśnie robię: statici trafiają do klasy, którą wstrzykuje. Mój wrapper jest już łatwo testowalny (bo jest mockowany).

Pozostało 580 znaków

2014-12-19 18:05
the real mućka
0
Madaoo napisał(a):

Moim zdaniem powinieneś pozbyć się metod statycznych - używanie ich jest tylko wtedy, gdy one są samodzielnymi funkcjami. Ja bym na twoim miejscu zanalizował i przerobił kod tak by był testowalny.

Te statyczne metody nie sa jego wlasne, wiec trudno zeby je zimenil. To co robi (wrappery) to w sumie jedyna opcja. Pomijajac mockowanie staticow.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0