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

Testy integracyjne Spring i mockowanie serwisu

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

Siema, mam kontroler ParkingController. Napisałem endpoint "/departure" do wypuszczenia pojazdu, wszystko działa poprawnie, wysyłam id auta do serwisu i ParkingService zajmuje się wszystkim i zwraca ResponseEntity ze statusem. Unit testy serwis przechodzi pomyślnie, jednak problem pojawia się przy testach integracyjnych. 

Próbowałem czegoś takiego:

@AutoConfigureMockMvc
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = ParkingController.class)
public class ControllerTest1 {

    @Autowired
    ParkingController parkingController;

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private ObjectMapper objectMapper;

    @MockBean
    ParkingService parkingService;
    
    @Test
    public void test() throws Exception {
        ResponseEntity<String> response = new ResponseEntity<>("Gate up", HttpStatus.OK);
        CarAtGateModel carAtGateModel = mock(CarAtGateModel.class);
        CarEntity carEntity = mock(CarEntity.class);
        when(carAtGateModel.getCarEntity()).thenReturn(carEntity);
        when(carAtGateModel.getCarEntity().getIdCar()).thenReturn("ID");
        when(parkingService.carDeparture(carAtGateModel.getCarEntity().getIdCar())).thenReturn(response);

        mockMvc.perform(MockMvcRequestBuilders.post("/departure"))
                .andDo(print())
                .andExpect(status().isOk());
    }
}

jednak mi wywala NullPointerException przy when(parkingService...)

Jak dodam wcześniej parkingService = mock(ParkingService.class)

to następnie wywala mi błąd przy mockMvc.perform(...).

 

Nie wiem już kompletnie jak podejść do tematu... 

1 odpowiedź

0 głosów
odpowiedź 30 stycznia 2022 przez Wiciorny Ekspert (269,710 p.)
wybrane 2 lutego 2022 przez Lulex
 
Najlepsza
  @Autowired
    ParkingController parkingController;

Ale ty nie mokujesz tego... tylko robisz automatyczne wiązanie do parking controlera,  i tu wychodzi brak zrozumienia adnotacji. W tym wypadku powołujesz kontener springa do załadowania z kontekstu kontenera danego obiektu, ale w testach nie dysponujesz realnie Controllerem. 
 

Jak dodam wcześniej parkingService = mock(ParkingService.class)

okej inicjujesz mocka, ale jeśli dalej zostawiasz @Autowired to nie zadziała są dwie alternatywy, albo mokujesz metodą, albo adnotacją, jeśli dany mock- nie jest obiektem zależnym tzn zagnieżdżonym. 
 

  @Mock
    ParkingController parkingController;

Więc żeby Cię naprwadzić dlaczego masz błąd pozostaje mi powiedzieć jedno : nie ucz się na pałe bez zrozumienia i nie korzystaj z czegoś, jeśli nie wiesz jaki mechanizm działania za tym stoi, czemu tak twierdze? Bo to wina adnotacji i widzę to po nich, że dodałeś je nie wiedząc po co, ale metoda prób i błędów + fakt żeby działało najpierw do kompilacji 

- importy nie widzę, ale nie potrzebuje bo pewnie też jest problem na tej płaszczyźnie korzystasz z 2 rozwiązań testowania w 1 klasie testowej- a chcesz używać raz X z jednej biblioteki oraz Y z drugiej do tego samego 
 

@AutoConfigureMockMvc
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = ParkingController.class)

Pobaw się z @RunWith(MockitoJUnitRunner.class)

1
komentarz 30 stycznia 2022 przez Lulex Użytkownik (820 p.)
Masz rację, pogubiłem się w adnotacjach i teraz mam spory bałagan
komentarz 31 stycznia 2022 przez Wiciorny Ekspert (269,710 p.)
jak dalej będzie problem to pytaj, wtedy pokierujemy dalej sprawdzimy co jest nie tak. Jesli masz pytania glebsze co  do adnotacji, tez pytaj tutaj albo nowy temat albo bezposrednio priv .
komentarz 2 lutego 2022 przez Lulex Użytkownik (820 p.)
Dzięki za nakierowanie. Problem był faktycznie w importach i adnotacjach.

Posiedziałem z filmikami z yt i małymi krokami wszystko zaczęło działać po drobnych modyfikacjach.
1
komentarz 2 lutego 2022 przez Wiciorny Ekspert (269,710 p.)
ciesze się, w razie czego służę pomocą w zakresie Javy,Springa i pokrewnych rzeczy jako Javoviec

Podobne pytania

0 głosów
0 odpowiedzi 316 wizyt
pytanie zadane 24 listopada 2019 w Java przez JuniorPL Użytkownik (770 p.)
0 głosów
1 odpowiedź 269 wizyt
pytanie zadane 29 sierpnia 2021 w Java przez Lulex Użytkownik (820 p.)
0 głosów
1 odpowiedź 340 wizyt
pytanie zadane 17 kwietnia 2020 w JavaScript przez michal_php Stary wyjadacz (13,700 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 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!

...