Im więcej testów, tym lepiej?

No to jakie jest to pokrycie kodu testami w Twoim projekcie? Wysokie / niskie? 95%, czy bardziej 40%? A może wystarczające? Tylko co to znaczy?   Jedna liczba W wielu projektach ustalany jest wymagany procent pokrycia kodu testami. Wynika to najczęściej z tego, że chcemy kogoś „zmusić” do pisania testów, więc tworzymy jakiś KPI (Key Performance Indicator). Ta liczba pojawia się w definition of done i teoretycznie możemy spać spokojnie. Jest tylko jeden problem. Nie określamy jakości tych testów. Kiepskie testy nie dają nam żadnej pewności przy pisaniu implementacji, czy refaktoryzowaniu kodu.     Żeby z ciekawości sprawdzić, jaki jest Więcej…

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…