Я не могу понять некоторые вещи во время тестирования с помощью JUnit, я написал несколько тестов, в то время как некоторые, кажется, работают просто с
@RunWith(MockitoJUnitRunner.class)
и
@Mock
некоторые кажутсяне работать с ними, и поэтому я должен использовать
@RunWith(SpringRunner.class)
и
@MockBean
Я понимаю, что @MockBean используется при работе с Spring Container, в то время как @Mock просто дляиспользовать для репликации / макета определенного класса и его методов.Но что было бы идеальным временем для использования @MockBean?
@Test
public void addBulkFcmLog() throws Exception {
JacksonTester.initFields(this, new ObjectMapper());
AdminFcmResource adminFcmResource = AdminFcmResource.builder()
.adminId(123L)
.build();
given(this.fcmService.addBulkFcmLog(any(BulkFcmDataResource.class))).willReturn(adminFcmResource);
MockHttpServletResponse response = mockMvc.perform(
post(Routes.SEND_FCM + "/admin/logs/add")
.contentType(MediaType.APPLICATION_JSON)
.content(bulkFcmDataResourceJacksonTester.write(BulkFcmDataResource.builder().adminId(123L).build()).getJson()))
.andExpect(status().isCreated())
.andReturn()
.getResponse();
assertThat(response.getContentAsString()).isEqualTo(
adminFcmResourceJacksonTester.write(adminFcmResource).getJson()
);
assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED.value());
}
Выше приведен тест, который я написал для контроллера в моем приложении для весенней загрузки, но когда я высмеиваю класс fcmService с помощью @Mock, ответ приходит с пустым телом, но затем я изменил его на @MockBean и Autowired класс контроллера затем тест вернул правильный результат.Как это случилось?