Sprawdzenie wartości w obiektach

Sprawdzenie wartości w obiektach
BI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 72
0

Witam
mam taką metodę w klasie:

Kopiuj
   public void update(Home home) 
   {
        Home entity = daoHome.findById(home.getId());
        ...
        if(!home.getRoom().equals(entity.getRoom())) {
            throw new IllegalArgumentException("Nie można zmienić ilości pokoi");
        }
        ....
        daoHome.save(home);
    }

i teraz chcę ją przetestować

Kopiuj
    @Test
    void testUpdateHasChanged()
    {
        Home home  = new Home();
        home.setId(1);
        home.setRoom(10);

        when(daoHome.findById(1)).thenReturn(new Home() {{
            setId(1);
            setRoom(11);
        }});

        assertThrows(IllegalArgumentException.class, () ->  serviceHome.update(home));
    }

problem w tym, że nie wiem jak wykryć czy zmieniła się ilość setRoom() z 10 na 11?
Odpalenie testu zwraca mi "Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown."

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1909
3
  1. Nie potrzebnie robisz save(), poczytaj jak działa JPA
  2. Zaraz dostaniesz lawinę hejtu z powodu mockowania - i słusznie :) napisz test integracyjny zamiast mockowania repozytorium - nic w ten sposób nie testujesz.
krancki
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 74.7261832, -41.7409518
  • Postów: 151
1
Kopiuj
public void update(Home home) 
   {
        Home entity = daoHome.findById(home.getId())
              .orElseThrow(()=>new IllegalArgumentException("Nie można zmienić ilości pokoi"));
        daoHome.save(home);
    }

Co do testu to walisz integracyjny w tym przepadku

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.