Dzisiaj nauczyłem się Testowania Setterów i Getterów :)

        Dzisiaj nauczyłem się, jak testować Settery i Gettery - konstruktorów, na razie nie odważam się jeszcze testować, wierzę, że działają :)

        Napotkałem się na opinie ludzi, że to bez sensu testowac Settery i Gettery i w sumie, to ogólnie w pracy pewnie tak, ale że ja mam cel nauczyć się jak najwięcej, to jadę ze wszystkim od początku do samego końca i nie, że tylko raz sobie przetestuje, tylko stworzyłem kilka klas - 6 - w których każda ma 4 atrybuty i do każdego jest Setter i Getter.

        Ktoś się zapyta, no ale na jaką cholerę tyle pisać w kółko tego samego? A no jak dla mnie na taką, jak powiedział Bruce Lee:

Nie boję się tego, co zna 10 000 ciosów, tylko tego, co 10 000 razy ćwiczył jeden cios.
        Więc po mojemu to jest sens i dlatego to robię. Oto jak skutecznie testować Settery i Gettery:

public class PlainOldJavaObjectTest {

    @Test
    public void testSetter_setsProperly() throws NoSuchFieldException, IllegalAccessException {
        //given
        final PlainOldJavaObject pojo = new PlainOldJavaObject();

        //when
        pojo.setValue("foo");

        //then
        final Field field = pojo.getClass().getDeclaredField("value");
        field.setAccessible(true);
        assertEquals(field.get(pojo), "foo");
    }

    @Test
    public void testGetter_getsValue() throws NoSuchFieldException, IllegalAccessException {
        //given
        final PlainOldJavaObject pojo = new PlainOldJavaObject();
        final Field field = pojo.getClass().getDeclaredField("value");
        field.setAccessible(true);
        field.set(pojo, "magic_values");

        //when
        final String result = pojo.getValue();

        //then
        assertEquals(result, "magic_values");
    }

}


        To jest ze StackOverflow, napisane przez: Makoto -dzięki! Jak sobie patrzyłem na ten kod, to wiele tam nowych rzeczy, bo to jest tzw. refleksja i to się rządzi swoimi prawami. Żeby dobrze to zrozumieć, trzeba poszczególne elementy wrzucić na googla i rzecz jasna samemu napisać kod, inaczej nie rozumiałem, a i tak z tym lekko nie było. Najbardziej kontrowersyjna dla mnie była część o exceptionach, czyli
NoSuchFieldException
i
IllegalAccessException
        Nie wiedziałem po co są, to nie pisałem, aż InteliJ mi podkreślił na czerwono
getDeclaredField
i
field.get(pojo)
        więc już wiem po co to jest. Ogólnie to jestem zdziwiony, że taki Setter i Getter, a takie skomplikowane testowanie. ps. A i od razu mówię, że testowanie setterów przez gettery w jednym teście nie jest zbytnio właściwe, bo przecież test ma testować jednostkę, pojedyńczo każdą metodę, a nie wszystko na raz, no bo jak nie zadziała, to jak sprawdzić co nie działa?

         To tyle ode mnie, a jaką naukę Tobie przyniósł dzisiejszy dzień?

Komentarze

Popularne posty z tego bloga

IntelliJ: zmiana rozmiaru czcionki scrollem

ThunderBird: jak zrobić professional stopkę