Założę się, że czasem używasz tych wymówek…

Nawet najlepszym programistom zdarzają się dni, w których pisanie testów wydaje się zbędnym narzutem pracy. Na pewno masz takie dni na swoim koncie. Zastanawiam się, jakich wymówek wtedy używasz. Może jednej z tych: 1. Trzeba szybko wypchnąć to na produkcję. Po co testować, skoro ma szansę zadziałać? Kiedy na produkcji pojawia się problem, albo kończy się sprint, pojawia się presja, żeby dowozić szybciej. Kierując się zasadą Pareta, uznajemy testy za najlepszych kandydatów do pominięcia. Prawda jest jednak taka, że właściwe testy są lepszym pomysłem, niż dobry design kodu. Wypuszczenie otestowanego kodu bez refaktoryzacji jest dużo bezpieczniejsze, niż najlepsza architektura bez testów. Więcej…

(Prawie) cała prawda o nazywaniu metod

Mówi się, że dwie najtrudniejsze rzeczy w programowaniu to: wygaszanie cache i dobieranie nazw. Trochę w tym prawdy. Są nawet tacy, którzy przyznają, że cache to jeszcze, ale te nazwy…   Jakie powinny być nazwy? No właśnie, jakie powinny być nazwy i co powinny mówić? Powinny mówić całą prawdę i tylko prawdę o tym, co dana metoda robi. Nie piszesz kodu dla siebie, tylko dla innych (i siebie w przyszłości). Nawet wujek Bob mówi o tym w Czystym Kodzie, że proporcje czytania kodu do pisania to 10 do 1. Jeśli metoda zwraca cenę produktu powiększoną o VAT, to wolisz, żeby Więcej…

Krótka historia efektów ubocznych

Czy wiesz, w jakiej kolejności są odpalane Twoje testy? Ja nie wiem. Bo za każdym razem są uruchamiane w losowej kolejności. Takie działanie ma zapobiegać zależnościom między testami, ponieważ powinny onne działać niezależnie. Czasem nawet współbieżnie. Jeśli chcesz nadać wartości zmiennym, albo zainicjalizować klasę, powinno się to odbywać w metodach z adnotacjami @Before i @BeforeClass, a w JUnit 5 @BeforeEach i @BeforeAll. Taki układ zapewni Ci identyczny stan początkowy każdego testu i zapobiegnie dziwnym błędom. Jeśli masz coś do „posprzątania” po teście, użyj metody z adnotacją @After / @AfterEach. Jeśli sprzątanie dotyczy całej klasy testowej, należy użyć @AfterClass / @AfterAll. Więcej…

Jeśli myślisz, że testy dają gwarancję bezbłędnej refaktoryzacji, to …

Jeśli myślisz, że testy dają gwarancję bezbłędnej refaktoryzacji, to trochę masz rację, ale też trochę nie masz 🙂 Im lepsza baza testów, tym szansa na wykrycie regresji będzie wyższa. Nie gwarantuje to jednak, że w każdym przypadku kod będzie działał zgodnie z pierwotnymi wytycznymi. Refaktoryzacja polega na zmianie implementacji bez zmian w funkcjonowaniu aplikacji i nie zawsze jest łatwym zadaniem. Sytuacja może być tym trudniejsza, im mniej znasz wymagania biznesowe. Kiedy nie bierzesz udziału w procesie planowania i podejmowania decyzji, znasz tylko to, co zostało spisane w formie testów lub kodu.Słyszałam ostatnio świetną historię, którą opowiadałam już podczas mojej prezentacji Więcej…

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

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ę Więcej…

Czy naprawdę używasz Mocków?

Do naszego żargonu na stałe weszło słowo mockowanie, głównie jako pochodna używania biblioteki Mockito. O każdym zaślepionym obiekcie mówimy, że jest mockiem, ale czy to jest poprawna nazwa? Nie wiem jak Ty, ale ja tak naprawdę bardzo rzadko używam mocków. Używam głównie Stubów. Stub to właśnie taka zaślepka, która zwraca konkretną wartość przy wywołaniu metody. Różnice między Mockami i Stubami tłumaczyłam podczas mojego webinaru. Niektóre biblioteki, jak Mockito niestety nie rozróżniają różnych typów zaślepek. Do czego więc służą mocki? Do sprawdzania implementacji. Możesz sprawdzić nie tylko parametry, z którymi została wywołana metoda, ale też ilość wywołań. Masz do wyboru kilka rodzajów Więcej…