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

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?

0

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

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.

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).

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.

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