Jak wygodniej uruchamiać testy jednostkowe

W jaki sposób odpalacie swoje testy jednostkowe? Po przez menu “Run” ;) ? Jeżeli uważacie, że to najlepszy sposób odpalania testów na świecie, to chyba niewiele wiecie o odpalaniu testów i świecie. Istnieje dużo wygodniejsze rozwiązanie.

Eclipse a testy jednostkowe

Eclipse pozwala nam na odpalenie testów na wiele sposobów:

  • Wybranie odpowiedniej opcji z menu Run
  • Użycie ikonki Run z toolbara.
  • Zaznaczenie kursorem nagłówka klasy lub metody i wybranie stosownej opcji z menu kontekstowego (o tyle ciekawe, że zaznaczając nagłówek metody – tylko ona zostanie uruchomiona, natomiast jeżeli wybierzemy klasę, to uruchomione zostaną wszystkie metody).
  • Zaznaczenie kursorem nagłówka klasy lub metody i użycie super intuicyjnego skrótu klawiszowego ctrl+shift+x, t.
  • Zaznaczenie klasy lub pakietu w project eksplorerze i wybranie odpowiedniej opcji z menu kontekstowego (o tyle ciekawe, że dzięki temu możemy uruchomić wszystkie klasy w danym pakiecie).
  • Inne, bardziej egzotyczne metody (typu użycie widoku JUnit).

Odpalanie testów ze skrótów klawiszowych wydaje się najwygodniejszym rozwiązaniem z powyższej listy, jednak nadal może być lepiej.

Continuous testing

Kiedyś natrafiłem na artykuł Arkadiusza Bendedykta o NCrunch. Jest to narzędzie do tzw. continuous testing. Polega to na tym, że za każdym razem kiedy następuje jakakolwiek edycja kodu źródłowego – NCrunch wychwytuje ten fakt i stara się odnaleźć testy jednostkowe, które pokrywają kawałek, który edytowaliśmy i uruchamia je. Podobnie podczas pisania testów – NCrunch automatycznie je wykonuje. Żadnego klikania, żadnych skrótów – po prostu skupiamy się na pisaniu a narzędzie odwala całą brudną robotę za nas.

Po przeczytaniu powyższego artykułu stwierdziłem, że muszę odnaleźć odpowiednik tego narzędzia dla Eclipse. Udało mi się znaleźć wtyczkę o nazwie Infinitest.

Infinitest – Continious testing dla Eclipse/InteliJ Idea

Infnitest sprawia, że pisanie testów staje się bardzo wygodne. Podobnie jak w NCrunch – po zmianie kawałka kodu i zapisaniu zmian, infinitest poszuka testów pokrywających zmieniony fragment. Również za każdym razem, gdy zapisujemy zmiany w danym teście jednostkowym, test ten zostaje odpalony.

Wtyczka dodatkowo dodaje nam zmieniający kolor pasek – dzięki temu wiemy, czy wszystkie testy przechodzą (zielony), czy też nie (czerwony) – obserwując pasek wiemy też co aktualnie infinitest robi. Najechanie kursorem na pasek pokaże nam jakie testy zostały odpalone.

Oprócz tego, w momencie kiedy okaże się, że nasze zmiany zepsuły testy, wtyczka wstawi do kodu markery w miejscu, które spowodowało, że test nie przeszedł. Najczęściej będzie to linijka z którąś z asercji, ale może to być też, np. jakiś kawałek kodu z którego poleciał wyjątek.

Z minusów: Infinitest nie będzie działać jeżeli w naszym workspace są jakieś błedy. Wydawać by się mogło, że to oczywiste, ale czasem tak bywa, że potrzebujemy mieć w edytorze zaimportowany jakiś projekt, ale nie jest nam potrzebne, żeby się kompilował. Logicznie rzecz biorąc wtyczka mogłaby działać we wszystkich innych projektach ale tak nie jest. Drugim minusem jest to, że plugin może zamulić Eclipse’a. Ja osobiście tego nie dostrzegłem, ale znam kilka osób u których wydajność IDE wyraźnie się zmniejszyła (osoby te miały szyfrowane dyski).

Podsumowanie

Infnitest jest aktualnie moim ulubionym pluginem do Eclipse’a. Dzięki niemu, zdążyłem już zapomnieć, kiedy odpalałem testy jednostkowe ręcznie (oczywiście przed wrzuceniem kodu na repozytorium zawsze warto przebudować cały projekt). Być może nie jest on tak rozbudowany jak NCrunch i nie zawsze działa tak jakbym tego chciał, ale uważam, że warto dać mu szansę.