Я разрабатываю веб-сервис 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;
}
}
Примечание. Я не хочу проверять, работает ли перехватчик, я хочу проверить конечные точки!!! Заранее спасибо!
Хотя ваши фрагменты тестового кода не показывают, какой тестовый бегун используется (@RunWith(...)
), я предполагаю, что вы используете тестовый бегун SpringRunner
или SpringJUnit4ClassRunner
.
Ваш фрагмент издевается над экземпляром IncomingInterceptor
, однако он не добавляется в (test)ApplicationContext
как bean-компонент. Используйте @MockBean
вместо @Mock
, чтобы добавить свой имитированный компонент в ApplicationContext
.
@MockBean
private IncomingInterceptor incomingInterceptor;
Я использую Spring Runner --> @RunWith(SpringRunner.class)