Spring, MockMvc, JPA, .save zwraca nulla tylko w testach integracyjnych

0

Testuje najprostszy controlller wszystko działa prawidłowo przez API.

API zapisuje obiekt dummyRepository.saveAndFlush(dummy) przez POSTA


mockMvc.perform(post("/dummy")
                .contentType(MediaType.APPLICATION_JSON)
                .content(objectMapper.writeValueAsString(dummy)))
                .andDo(print())
                .andExpect(status().isCreated());

No i wszystko fajnie tylko dummyRepository.saveAndFlush(dummy) zwraca nulla.

identyczny przypadke jest opisany tutaj:
https://mkyong.com/spring-boot/spring-mockito-unable-to-mock-save-method/

tylko, że ja nic nie wstrzykuje przez mokito z any(), jedyne co wstrzukuje to serwis przez @MockBean ale to jest oczywiste

1

No jak dajesz mockbean to chyba wiadomo, ze zwroci nulla. MockBean to adnotacja mockito. Musisz dać jakieś
given(dummyRepository.metoda(..).willReturn(cos)
by dzialalo

1

No Twój gościu nic nie wstrzykuje, bo tam nic nie ma. A ty masz repo. controller musi wiedziec co z tym zrobic.
Tak wgl to takich testow nie pisz, jedynie co tak mozna testowac to kontrakt, ale zrób test normalnie z @SpringBootTest i TestRestTemplate i to będzie coś testować bo @WebMvcTest używam tylko do kontraktu z frontend i walidacji requestów, jak używam javax validation

3

A może zrobisz to jak normalny człowiek, bez mocków, mockmvc i całego pozostałego gówna? Zrób SpringBootTest, odpal aplikacje, zrób w teście normalnego klienta http i uderz nim w twój endpoint. To się niczym nie będzie różnic od odpalenia twojej aplikacji i puszczenia posta. W taki sposób należy testować i wtedy nie ma żadnych dziwnych sytuacji ze nagle w teście coś nie działa, a normalnie jak odpalisz to działa.

0

Wklej swój kod z kontrolera i klasy testowej

0

Dobra możecie skasować ten wątek bo trochę spam zrobiłem, a nie widzę opcji do kasowania

1 użytkowników online, w tym zalogowanych: 0, gości: 1