Как протестировать веб-сервис Spring REST при использовании HandlerInterceptorAdapter?

Я разрабатываю веб-сервис Spring. Я хочу проверить свои конечные точки, но по какой-то причине я всегда получаю следующее исключение при запуске тестов:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.....IncomingInterceptor' 

Тем не менее, я отметил класс @Component. Перехватчик работает, когда я тестирую конечную точку с помощью внешнего клиента! Кто-нибудь знает, как решить эту проблему?

Вот мой код, когда я тестирую конечную точку: частный MockMvc mockMvc;

@InjectMocks
private AccountController accountController;

@Mock
private IncomingInterceptor incomingInterceptor;

private Gson gson;

@Before
public void setup() {
    gson = new Gson();
    mockMvc = MockMvcBuilders.standaloneSetup(accountController).addInterceptors(incomingInterceptor).build();
}

@Test
public void testAddAccount() throws 
    mockMvc.perform(MockMvcRequestBuilders.post("/account/add")
            .content(gson.toJson(account))
            .contentType(MediaType.APPLICATION_JSON))
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andExpect(MockMvcResultMatchers.jsonPath("$.id").isNotEmpty());
}

Код для IncomingInterceptor:

@Component
public class IncomingInterceptor extends HandlerInterceptorAdapter {

@Autowired
private Gson gson;

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//code in here works
    return true;
}
}

Примечание. Я не хочу проверять, работает ли перехватчик, я хочу проверить конечные точки!!! Заранее спасибо!

0
0
160
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя ваши фрагменты тестового кода не показывают, какой тестовый бегун используется (@RunWith(...)), я предполагаю, что вы используете тестовый бегун SpringRunner или SpringJUnit4ClassRunner.

Ваш фрагмент издевается над экземпляром IncomingInterceptor, однако он не добавляется в (test)ApplicationContext как bean-компонент. Используйте @MockBean вместо @Mock, чтобы добавить свой имитированный компонент в ApplicationContext.

@MockBean
private IncomingInterceptor incomingInterceptor;

Я использую Spring Runner --> @RunWith(SpringRunner.class)

Jakob Herk 29.05.2019 22:23

Другие вопросы по теме