• 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

0 głosów
55 wizyt
pytanie zadane 19 stycznia w Java przez Lulex Użytkownik (560 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

+2 głosów
odpowiedź 19 stycznia przez Czarus0 Użytkownik (900 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 przez mbabane Szeryf (79,300 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ź 45 wizyt
pytanie zadane 16 października w Java przez p_wika Nowicjusz (190 p.)
0 głosów
0 odpowiedzi 65 wizyt
pytanie zadane 22 sierpnia w Java przez Bartek030 Obywatel (1,280 p.)
0 głosów
1 odpowiedź 56 wizyt
pytanie zadane 4 maja w Java przez janyczek Początkujący (360 p.)

85,802 zapytań

134,588 odpowiedzi

298,790 komentarzy

56,697 pasjonatów

Advent of Code 2021

Top 15 użytkowników

  1. 504p. - rucin93
  2. 492p. - CC PL
  3. 472p. - nidomika
  4. 393p. - Whistleroosh
  5. 387p. - ScriptyChris
  6. 380p. - adrian17
  7. 348p. - TheLukaszNs
  8. 347p. - WhiskeyTaster
  9. 329p. - Argeento
  10. 326p. - Dagohar
  11. 290p. - Anonim 1794483
  12. 287p. - Klaudia
  13. 284p. - B4mbus
  14. 275p. - b0mbix
  15. 252p. - tokox
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...