Testowanie wielu przypadków.

0

Cześć.
Piszę pewien prosty walidator który otrzymuje bean'a z konfiguracją. Potrzebuję sprawdzić kilka pól na różne sposoby, wartości skrajne tj. minimalne, maksymalne, poprawne, błędne itp.
I naszło mnie takie pytanie.
Kiedyś przyjąłem sobie taki schemat aby w teście jednostkowym najpierw deklarować pola, potem przygotować dane a na końcu wykonać test (chyba nawet z jakiejś książki to wziąłem). Moim zdaniem jest to bardzo czytelne.
I np. mam taki test:

 @Test
    public void isCorrectSizeX(){
        when(configBean.getSizeX()).thenReturn(100);

        assertThat(configBeanValidator.isCorrectSizeX(),is(true));
    }

Chciałbym sprawdzić dla innych wartości także aby upewnić się że dla pewnych wartości zwróci true a dla innych false.
Pytanie więc, czy lepiej pisać dla każdego testu osobną metodę testującą czy zrobić coś w stylu:

 @Test
    public void isCorrectSizeX(){
        when(configBean.getSizeX()).thenReturn(100);
        assertThat(configBeanValidator.isCorrectSizeX(),is(true));

        when(configBean.getSizeX()).thenReturn(1);
        assertThat(configBeanValidator.isCorrectSizeX(),is(false));
    }

przez co mój schemat o którym na początku pisałem jest niejako zaburzony.
Oczywiście powyższy przykład to prosty walidator który ma być głównie przykładem.
Jak w przypadku kiedy mamy do sprawdzenia wiele punktów/przypadków jest lepiej pisać testy: każdy osobno robiąc listę testów czy kilka przypadków jeśli tyczy się tego samego testować w jednej metodzie? Może testy parametryczne? A może jest jeszcze coś innego?

Pozdrawiam,
eL

1

Ja bym sugerował jeden przypadek testowy na metodę. Wtedy jak sie sypnie to od razu widac gdzie no i jest to bardziej eleganckie.

0

W miarę możliwości pisz testy parametryczne. TestNG (dataproviders) ma wsparcie out-of-box w JUnit potrzebujesz junitparams runner (dlatego jest imo słabszy od testng ma też słabsze wsparcie dla grupowania testów).

Jeśli się nie da sparametryzować testu to wygodnie mieć oddzielny test na przypadek (lubię mieć jedną asercję / sprawdzenie interakcji na test).

Kod który napisałeś to idealny przykład na test parametryczny, bo testujesz dla tych samych pól. Co najwyżej potrzebujesz 2 parametrów np.
int inputSize, boolean expectedResult i zobaczyć, że to co wyszło jest równe expectedResult (można na wiele sposobów, im prościej tym lepiej).

1 użytkowników online, w tym zalogowanych: 0, gości: 1