Ich versuche, die richtige Konfiguration zum Testen HandlerInterceptor
einer Spring-Boot-Anwendung mit @MockBean
Abhängigkeiten zu finden, aber ohne Initialisierung der gesamten Bean-Pool, weil einige Controller Aufrufe haben können nicht verspottet werden (wissend, dass @Before
Anruf nach @PostContruct
Controller-Aufruf kommt).Vermeiden Sie Controller-Initialisierung beim Testen Spring-Boot HandlerInterceptor
Denn jetzt bin ich in diese Syntax kommen:
@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());
}
}
Aber Test nicht besteht, java.lang.IllegalStateException: Failed to load ApplicationContext
weil man RestController
einen @PostContruct Anruf mit versucht, Daten von proprieteService
mock zu erhalten, der nicht in diesem Moment verspottet haben.
Also meine Frage ist: Wie kann ich verhindern Springboot Test Loader alle meine Controller zu initialisieren, die 1: Ich brauche nicht für den Test, 2: Auslöser Anrufe, die passieren, bevor ich etwas verspotten kann?
Schreiben Sie einen Komponententest NICHT einen Integrationstest. Instantiiere den 'HandlerInterceptor', erzeuge Mocks und injiziere sie. –
In diesem Fall, wie man '@ autowired' Abhängigkeiten in meinem Interceptor verspottet? Ich würde spezielle Spring-Boot-Annotationen benötigen, '@ SpringBootTest' machte die Arbeit. – Aphax