Zanim zaczniesz się zastanawiać jak przetestować prywatną metodę…

Opublikowane przez Ola Kunysz w dniu

Pewnie chociaż raz zdażyło Ci się wyszukiwać frazę „jak przetestować metodę prywatną?”. Wiadomo, że to jest możliwe i czasem wydaje się dość rozsądne. Czasem nie ma wyjścia i musisz to zrobić. Zanim jednak podejmiesz to wyzwanie, zadaj sobie te trzy pytania:

1. Czy można przetestować logikę używając wyłącznie publicznych metod?
Metody prywatne powinny służyć zwiększaniu czytelności kodu i wyciąganiu małych części wspólnych. To nie miejsce na ważne operacje i rozpisywanie strategii działania. Jeśli Twoja metoda przykładowo dodaje VAT do ceny, może wystarczy sprawdzić, czy cena brutto jest ok? Albo jeśli skleja tekst, wystarczy porównać efekt końcowy zwracany przez publiczną metodę z oczekiwanym?

2. Czy da się to zrefaktoryzować?
Jeśli dużo dzieje się w Twoich prywatnych metodach, może warto się im przyjrzeć. Nawet jeśli tworzysz klasę i ma ona jedną odpowiedzialność, może z czasem obrosnąć i stać się jakimś wielkim potworem. Wtedy można powyciągać duże kawałki do innych klas, które będą spełniać te zadania w szeregu publicznych metod. To zwiększy nie tylko czytelność kodu, ale przede wszystkim poprawi jego testowalność!

3. Jaki będzie koszt utrzymania tego testu?
Prywatne metody często się zmieniają. Ilość i typ parametrów, zwracany rezultat mogą być już inne w kolejnym sprincie. Jeśli z każdą zmianą w kodzie musisz zmieniać test, to ten test nie jest najbardziej pomocny, prawda? Ważne jest, żeby nie „betonować” kodu testami. Testy mają za zadanie sprawdzać efekty końcowe działania kodu, a nie dogłębnie analizować, czy każda operacja przebiega zgodnie z obecną wizją.

Czasem mimo wszystko musisz napisać test do prywatnej metody, wtedy możesz zajrzeć TUTAJ. Ten tekst ma ponad 10 lat, ale niewiele się w tym temacie zmieniło. Większość instrukcji i tak go cytuje.

O testowaniu metod prywatnych i innych tematach dotyczących testów jednostkowych mówiłam na konferencji bITconf w Bydgoszczy, tu jest nagranie.

 

Kategorie: Wyzwania