Wpis z mikrobloga

@KKK1337: testujesz 4 różne klasy w jednej klasie testowej, co samo w sobie już jest słabe. Dodatkowo w 3 klasach z 4 sprawdzasz tylko po 1 przypadku, więc równie dobrze GrossPriceCalculator mógłby zawsze zwracać 124.23 i przejdzie test. Rozbij to na 4 osobne testy i dopisz więcej przypadków (np 0, bardzo duże liczby, bardzo małe liczby, liczby ujemne, przypadek gdy będzie więcej niż 2 cyfry po przecinku, etc)
@Kuzguwu: są podobno dwie szkoły, gdzie atomowo testuje się funkcjonalności, czyli londyńska i ta druga gdzie testuje się całość jakiegoś komponentu, jeśli projekt stosuje się do danej metody pisania testów to warto się trzymać tej metody w obrębie całego projektu
@KKK1337: napisałeś "testowanie komponentu" i brzmiało to jak test integracyjny.

Jeśli chodzi o sam test to mi ciężko byłoby ocenić jakość tego testu bez zobaczenia klasy, czy na pewno cała logika w niej zawarta jest otestowana. Może to osoba robiąca CR miała na myśli.

Plus nazwy testów mało mówią, wolę konwencję gdzie testy są częścią dokumentacji, ale to zależy od teamu w jakim pracujesz.
via Wykop Mobilny (Android)
  • 1
@KKK1337: te testy są całkiem dobre, bo są proste. Jedyne co bym zmienił to wyrzucenie tych helperow: ich zadanie to generalnie ukrywanie elementów nieistotnych w danym teście, u ciebie jest na odwrót: nic nie upraszczają tylko zasłaniają to jak się używa danego obiektu. Co do klas testowanych: wywal te settery, zamiast tego przekaż potrzebne parametry w konstruktorze
@Saly: ale ja nie mówię o długości kodu, bo to z tym się zgadzam, ale to co test sprawdza. Jeśli sprawdza integrację między klasami - jest to test integracyjny, jeśli testuje logikę 1 klasy, jest to test jednostkowy.
@Jurix: w definicji testów jednostkowych nie ma nic o tym, że jednostką jest klasa. Tutaj właśnie jest największy problem z nazewnictwem testów, że nie wiadomo co czym jest i większość nazw jest używana według doświadczeń danej osoby.
@Jurix: In computer programming, unit testing is a software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures https://en.wikipedia.org/wiki/Unit_testing . Sprowadzając do absurdu to żaden unit test nie jest unit testem, bo zawsze korzystamy z innych klas np. klasa do splitowania stringów będzie używała stringów, który jest innym unitem kodu z własną hermetyzacją i
@Saly: Zdefiniować coś może każdy. Ja podałem pierwszą lepszą, z polskiej wiki. Istnieje? Istnieje.

Generalnie może masz rację i test 1 modułu być może zostać nazwany testem jednostkowym, pytanie na ile framework którego używamy to wspiera i czy wszyscy w naszym zespole (i osoby które do niego dołączą) zrozumieją przyjętą konwencję.
przecież testowanie całości komponentu to nie unit test. To nie jest inna szkoła tylko inny rodzaj testu.


@Jurix: nie jest to prawda, to zależy jak zdefinujemy unit test, idąc według książki kenta becka - to jeden całościowy test komponent/danego "featurea" to poprawny "unit test"( u niego w zasadzie nie ma rozróżnienia na unity czy integracyjne) + w momencie refactora jest zasada że brak nowych testów - także jak dochodza nowe klasy
@Jurix: @Saly: @KKK1337: @Desseres: dodając jeszcze do tego mojego komentarza - to te całe piramidy testów który mówią o tym że unitowych powinno być jak najwięcej integracyjnych mniej(ale co zabawne nie bardzo definiuje ta piramida co jest unit a co integration) a e2e/feature jak najmniej powstały właśnie wtedy jak raz - nie brało to w ogóle pod uwagi architektury mikroserwisowej/mirkofrontendów w obecnych czasach(sama piramida to jakieś 2010-2012, przynajmniej