Я пытаюсь найти правильную конфигурацию для тестирования HandlerInterceptor
приложения Spring-boot с @MockBean
зависимостями, но без инициализации всего пула компонентов, потому что некоторые контроллеры имеют @PostConstruct
вызовы, которые нельзя имитировать (зная, что @Before
вызов идет после @PostContruct
Вызов контроллера).
На данный момент я пришел к этому синтаксису:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class MyHandlerInterceptorTest {
@Autowired
private RequestMappingHandlerAdapter handlerAdapter;
@Autowired
private RequestMappingHandlerMapping handlerMapping;
@MockBean
private ProprieteService proprieteService;
@MockBean
private AuthentificationToken authentificationToken;
@Before
public void initMocks(){
given(proprieteService.methodMock(anyString())).willReturn("foo");
}
@Test
public void testInterceptorOptionRequest() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("/some/path");
request.setMethod("OPTIONS");
MockHttpServletResponse response = processPreHandleInterceptors(request);
assertEquals(HttpStatus.OK.value(), response.getStatus());
}
}
Но тест терпит неудачу, java.lang.IllegalStateException: Failed to load ApplicationContext
потому что один RestController
с вызовом @PostContruct пытается получить данные от proprieteService
мока, которые в данный момент не были имитированы.
Итак, мой вопрос: как я могу запретить тестовому загрузчику Springboot инициализировать все мои контроллеры, которые 1: мне не нужны для теста, 2: триггерные вызовы, которые происходят до того, как я смогу что-то издеваться?
HandlerInterceptor
, создайте макеты и внедрите их. - person M. Deinum   schedule 19.07.2017@autowired
в моем Interceptor? Мне потребуются специальные аннотации загрузки Spring,@SpringBootTest
выполнял эту работу. - person Aphax   schedule 19.07.2017