Dzisiaj nauczyłem się (SAM TO ODKRYŁEM HA HA) jak testować konstruktory
To nie lada wyzwanie. Chodź konstruktory to chyba jedno z ostatnich elementów jakie przyjdzie komuś do głowy testować, to się tego podjąłem. Rzadkość występowania testów może świadczy o tym, że tak mało jest o tym napisane w sieci, a przynajmniej ja nie bardzo potrafiłem znaleźć odpowiednie dla mnie wytłumaczenie.
Jeden kozak (ponad milion repa na StackOverflow) napisał, że żeby przetestować konstruowanie atrybutów, trzeba testować pojedyncze konstruktory jeden po drugim, a przynajmniej tak zrozumiałem jego słowa:
Jednak ja wymyśliłem coś lepszego. Postanowiłem skorzystać z refleksji zgodnie z tym co napisałem kilka postów temu. I po prostu potraktowałem to jak testowanie settera - bo tak widzę konstruktor jako pewną jego odmianę. Oczywiście do tego potrzebowałem jeszcze stworzyć obiekty zawarte w konstruktorze, ale po za tym to tak samo.
To, co mnie zastanawiało, to to, czy zgodne z konwencją jest używanie kilku assertów w jednym teście, ale wyczytałem na Stacku, że tak, więc mam już czyste sumienie. I planuje założyć pytanie na Stacku, żeby trochę sobie repa podbić tym no i może ktoś mi da lepszą odpowiedź. Zobaczymy.
To tyle ode mnie, a może teraz Ty podzielisz się ze mną swoim dzisiejszym odkryciem w komentarzu?
Jeden kozak (ponad milion repa na StackOverflow) napisał, że żeby przetestować konstruowanie atrybutów, trzeba testować pojedyncze konstruktory jeden po drugim, a przynajmniej tak zrozumiałem jego słowa:
Dla mnie to nie do końca satysfakcjonująca odpowiedź, ponieważ ja bym chciał przetestować konstruktor, który zawiera w sobie 9 atrybutów w tym 5 obiektów! I weź tu to przetestuj z założeniem, że nie będę używał żadnej innej dodatkowej metody do tego, zgodnie z kanonem sztuki testowania: "1 unit per test". No bo jeśli inaczej to wystarczy dać getera i już widać, czy konstruktor działa czy nie.It looks like you've got a canonical way of getting the "raw" value (toLong in this case) - so just test that all the constructors are correct when you fetch that value. Then you can test other methods (such as getString()) based on a single constructor, as you know that once the various constructors have finished, they all leave the object in the same state.This is assuming somewhat white-box testing - i.e. you know that toLong is really a simple reflection of the internal state, so it's okay to test that + a constructor in a test.
Jednak ja wymyśliłem coś lepszego. Postanowiłem skorzystać z refleksji zgodnie z tym co napisałem kilka postów temu. I po prostu potraktowałem to jak testowanie settera - bo tak widzę konstruktor jako pewną jego odmianę. Oczywiście do tego potrzebowałem jeszcze stworzyć obiekty zawarte w konstruktorze, ale po za tym to tak samo.
To, co mnie zastanawiało, to to, czy zgodne z konwencją jest używanie kilku assertów w jednym teście, ale wyczytałem na Stacku, że tak, więc mam już czyste sumienie. I planuje założyć pytanie na Stacku, żeby trochę sobie repa podbić tym no i może ktoś mi da lepszą odpowiedź. Zobaczymy.
To tyle ode mnie, a może teraz Ty podzielisz się ze mną swoim dzisiejszym odkryciem w komentarzu?
Komentarze
Prześlij komentarz