Czy ten unit test jest ok https://pastebin.com/wCfVMaLJ ? Dostałem na CR informację żeby go poprawić bo jest słaby... bez jakiegokolwiek info o #!$%@? chodzi, a na pytanie nie dostaję odpowiedzi. #php #programowanie
@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.
@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.
Test jednostkowy (ang. unit test) – metoda testowania tworzonego oprogramowania poprzez wykonywanie testów weryfikujących poprawność działania pojedynczych elementów (jednostek) programu – np. metod lub obiektów.
@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 procedureshttps://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
@Jurix: np. tutaj https://youtu.be/2vEoL3Irgiw?t=170 autor nazywa unitami testy modułu a integracyjnymi testy integracji wielu modułów. Sam nie używam nazwy unit test, bo według mnie jest ona szkodliwa rodząc dyskusje, których nie powinno być. Jedyne co mnie wkurza, to, że ktoś broni definicji, która nie istnieje
@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
#php #programowanie
https://medium.com/@adrianbooth/test-driven-development-wars-detroit-vs-london-classicist-vs-mockist-9956c78ae95f
https://livebook.manning.com/book/unit-testing/chapter-2/1
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.
https://pl.wikipedia.org/wiki/Test_jednostkowy
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ą iGeneralnie 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ę.
@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