• 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

VPS Starter Arubacloud
0 głosów
283 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,120 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,120 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,120 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 313 wizyt
pytanie zadane 24 listopada 2019 w Java przez JuniorPL Użytkownik (770 p.)
0 głosów
1 odpowiedź 268 wizyt
pytanie zadane 29 sierpnia 2021 w Java przez Lulex Użytkownik (820 p.)
0 głosów
1 odpowiedź 327 wizyt
pytanie zadane 17 kwietnia 2020 w JavaScript przez michal_php Stary wyjadacz (13,700 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...