Как инициализировать поля контроллеров при тестировании Spring Controller с помощью MockMvc

#spring-boot #spring-mvc #mockito #spring-boot-test #mockmvc

#spring-boot #spring-mvc #mockito #spring-boot-test #mockmvc

Вопрос:

Я использую Spring Boot 2.2.4, используя @AutoConfigureMockMvc для инициализации объекта MockMvc. И тестирование конечных точек моего контроллера:

     mockMvc.perform(get(URL)).andExpect(status().isOk());
  

Но я также должен имитировать службу в этом контроллере. Попытался просто автоматически подключить этот контроллер в тестовом классе:

 @RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class MyControllerIntegrationTest {
 @Autowired
 MyController myController;
  

А затем попытался установить макет службы для этого объекта:

   FeignService feignService = mock(FeignService.class);
  //setting up some when() invocations
  //set feignService to myController with reflection
  

Но когда я выполняю запрос MockMvc GET и получаю доступ к контроллеру, появляется другой экземпляр MyController, а не тот, на который я установил feignService.

Итак, как настроить поля тестируемого контроллера? Как установить mocked service?

Комментарии:

1. Использование @MockBean и загрузка spring обработают это. Создайте поле типа FeignService в своем тесте, прокомментируйте @MockBean и запустите тест.

2. Спасибо, это работает!