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:

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.
        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.

         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

Popularne posty z tego bloga

IntelliJ: zmiana rozmiaru czcionki scrollem

ThunderBird: jak zrobić professional stopkę