• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

porównanie dwóch list w teście

Object Storage Arubacloud
0 głosów
204 wizyt
pytanie zadane 19 stycznia 2021 w Java przez Lulex Użytkownik (820 p.)

Cześć.

Zabrałem się za naukę testów jednostkowych i napotkałem pewien problem. Otóż mam liste, gdzie powrzucałem obiekty:

ofertaPracyList.add(new OfertaPracy("Warszawa", 3000, Set.of("Java", "SQL"), 2));

utworzyłem też metodę, która tworzy listę ze wszystkimi nazwami miast jakie wystepują w liście oferty pracy (przyjmuje liste jako argument):

public Set<String> wszystkieRozneMiasta(List<OfertaPracy> ofertyPracy) {
        
        Set<String> rozneMiasta = new HashSet<>();
        for (OfertaPracy ofertaPracy : ofertyPracy) {
            rozneMiasta.add(ofertaPracy.getMiasto());
        }
        return rozneMiasta;

i chcę to teraz przetestować:

@org.junit.Test
public void wszystkieRozneMiastaJestPrawdziwa2() {
    //given
    Set<String> rozneMiastaOczekiwanyWynik = Set.of("Warszawa", "Wrocław", "Kraków", "Białystok", "Gdańsk", "Lublin");

    //then
    Assert.assertEquals(rozneMiastaOczekiwanyWynik, ofertaPracySerwis.wszystkieRozneMiasta(ofertaPracyList));
}

Test przechodzi prawidłowo, jednak wystarczy, że któreś miasto napiszę z małej litery i test jest failed, a warszawa i Warszawa to "to samo" w sumie :) . Więc mam pomysł aby wstawić toLowerCase(). tylko nie mam pojęcia gdzie to w tym teście lub tej metodzie wstawić. Czy może powinienem to w ogóle jakoś inaczej rozwiązać?

2 odpowiedzi

+3 głosów
odpowiedź 19 stycznia 2021 przez Czarus0 Obywatel (1,040 p.)
Cześć, głównym celem testów jest sprawdzenie czy Twoja funkcjonalność działa zgodnie z założeniami. Twoja metoda działa w ten sposób, że nie ignoruje wielkości znaków co właśnie weryfikuje Twój test jednostkowy. Jeśli chcesz, żeby przechodziła Ci "warszawa" to Twoja testowana metoda 'wszystkieRozneMiasta' powinna ignorować wielkość liter poprzez np. wywołanie .equalsIgnoreCase() bądź też ustawienie pierwszego znaku na wielką literę a resztę na małe.

Nie możesz wymagać, aby testowana metoda nagle przepuszczała przypadki, które nie zostały zaimplementowane. Wynikiem działania Twoje metody dla danych wejściowych "Warszawa", "warszawa" będzie "Warszawa", "warszawa". Musisz "nauczyć" swoją metodę co ma dokładnie dopuszczać do zbioru. "warszawa".equals("Warszawa") da zawsze false.
+1 głos
odpowiedź 19 stycznia 2021 przez mbabane Szeryf (79,280 p.)

Jeśli zadaniem metody wszystkieRozneMiasta jest niemodyfikowanie wyniku to test jest ok. Możesz to tylko jakoś bardziej zaznaczyć, że te dane który wyszły pochodzą z listy wejściowej, jednym ze sposobów może być przygotowanie danych bliżej wywołania testowanej metody:

// given
List<OfertyPracy> offers = createWithCities("Warszawa", ...);
Set<String> expected = Set.of("Warszawa", ...);

// when then
Assert.assertEquals(expected, ofertaPracySerwis.wszystkieRozneMiasta(offers));

Podobne pytania

+1 głos
1 odpowiedź 136 wizyt
pytanie zadane 29 maja 2022 w Java przez blofeld Użytkownik (700 p.)
+1 głos
1 odpowiedź 671 wizyt
pytanie zadane 16 października 2021 w Java przez p_wika Nowicjusz (190 p.)
0 głosów
0 odpowiedzi 254 wizyt
pytanie zadane 22 sierpnia 2021 w Java przez Bartek030 Obywatel (1,460 p.)

92,555 zapytań

141,403 odpowiedzi

319,556 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...