J'essaie de trouver la bonne configuration pour tester HandlerInterceptor
d'une application-boot Spring, avec @MockBean
dépendances, mais sans initialiser l'ensemble piscine Bean, parce que certains contrôleurs ont @PostConstruct
appels qui peuvent assurer ne pas être moqué (sachant que @Before
appel vient après @PostContruct
appel de contrôleur).Évitez l'initialisation des contrôleurs lors du test de démarrage de printemps HandlerInterceptor
Pour l'instant je suis venu à cette syntaxe:
@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());
}
}
Mais test échoue, java.lang.IllegalStateException: Failed to load ApplicationContext
parce qu'un RestController
ayant un appel @PostContruct tente d'obtenir des données de proprieteService
maquette qui n'ont pas été moqué à ce moment. Donc ma question est: comment puis-je empêcher Springboot test loader d'initialiser tous mes contrôleurs, ce qui 1: je n'ai pas besoin pour le test, 2: déclencher des appels qui se passe avant que je puisse me moquer de quoi que ce soit?
Écrire un test unitaire PAS un test d'intégration. Instanciez simplement 'HandlerInterceptor', créez des mocks et injectez-les. –
Dans ce cas, comment se moquer des dépendances '@ autowired' dans mon Interceptor? J'aurais besoin d'annotations de démarrage Spring spéciales, '@ SpringBootTest' faisait l'affaire. – Aphax