Не удалось загрузить ApplicationContext. Не могу создать интеграционный тест - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь создать интеграционный тест для этого контроллера REST:

@RestController
@RequestMapping(path = {"/api/reports", "/api"})
public class DependencyReportController {

private final DependencyDifferenceService differenceService;

public DependencyReportController(DependencyDifferenceService differenceService) {
    this.differenceService = differenceService;
}

@GetMapping(path = {"/dependencies/difference", "/deps/diff"},
    produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ServiceDependenciesReport get() {
    return differenceService.getAllDiffs();
}


}

Мой тест, в котором я пытаюсь проверить статус:

@RunWith(SpringRunner.class)
@WebMvcTest(DependencyReportController.class)
public class DependencyReportControllerApiTest {
@Autowired
private MockMvc mockMvc;

@MockBean
private DependencyDifferenceService differenceService;

@Test
public void test() throws Exception{
    ServiceDependenciesReport report = new ServiceDependenciesReport();
    report.setElapsed("elapsed");
    report.setSuccess(true);
    when(differenceService.getAllDiffs()).thenReturn(report);
    this.mockMvc.perform(get("/dependencies/difference")).andDo(print()).andExpect(status().isOk());
}



 }

И он не работает. Полная трассировка стека:

Описание:

Мониторинг свойств поля. Для приложения-приложения мониторинга требуется компонент типа «MonitoringProperties», который не может быть найден. Точка внедрения имеет следующие аннотации: - @ org.springframework.beans.factory.annotation.Autowired (обязательно = true)

 Action:
 Consider defining a bean of type 'MonitoringProperties' in your configuration.
 2020-01-20 12:40:28.884 ERROR 6388 --- [           main] o.s.test.context.TestContextManager      : Caught exception while 

, разрешающий TestExecutionListener [org.springframework.boot.test.mock.mockito. MockitoTestExecutionListener@35e2d654] для подготовки тестового экземпляра [DependencyReportControllerApiTest@44b940a2] java .lang.IllegalStateException: не удалось загрузить ApplicationContext в org.springframework.test.context.cache.DwareaultCacheAwareContextLoaderDelegate.loadContext (DefaultCacheAwareContextLoaderDelegate.ge): spring-test-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.springframework.test.context.support.DefaultTestContext.getApplicationContext (DefaultTestContext. java: 108) ~ [spring-test-5.1.5 .RELEASE.jar: 5.1.5.RELEASE] at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields (MockitoTestExecutionListener. java: 99) ~ [spring-boot-test-2.1.3.RELEASE. jar: 2.1.3.RELEASE] at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields (MockitoTestExecutionListener. java: 79) ~ [sp ring-boot-test-2.1.3.RELEASE.jar: 2.1.3.RELEASE] в org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance (MockitoTestExecutionListener. java: 54) ~ [spring-boot -test-2.1.3.RELEASE.jar: 2.1.3.RELEASE] at org.springframework.test.context.TestContextManager.prepareTestInstance (TestContextManager. java: 246) ~ [spring-test-5.1.5.RELEASE. jar: 5.1.5.RELEASE] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest (SpringJUnit4ClassRunner. java: 227) [spring-test-5.1.5.RELEASE.jar: 5.1.5.RELEASE] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner $ 1.runReflectiveCall (SpringJUnit4ClassRunner. java: 289) [spring-test-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.junit. runners.model.ReflectiveCallable.run (ReflectiveCallable. java: 12) [junit-4.12.jar: 4.12] в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock (SpringJUnit1) 10 [springJUnit4C) -test-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.spri ngframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner. java: 246) [spring-test-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.springframework.jit.4. SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner. java: 97) [spring-test-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.junit.runners.ParentRunner $ 3.run (ParentRunner. java: 29) ) [junit-4.12.jar: 4.12] в org.junit.runners.ParentRunner $ 1.schedule (ParentRunner. java: 71) [junit-4.12.jar: 4.12] в org.junit.runners.ParentRunner.runChildren ( ParentRunner. java: 288) [junit-4.12.jar: 4.12] в org.junit.runners.ParentRunner.access $ 000 (ParentRunner. java: 58) [junit-4.12.jar: 4.12] в org.junit .runners.ParentRunner $ 2.evaluate (ParentRunner. java: 268) [junit-4.12.jar: 4.12] по адресу org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate (RunBeforeTestClassCallCback). [spring-test-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.springframework.test.context.junit4.statements.RunAfterTest ClassCallbacks.evaluate (RunAfterTestClassCallbacks. java: 70) [spring-test-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.junit.runners. ParentRunner.run (ParentRunner. java: 363) [junit-4.12.jar: 4.12] в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner. java: 190) [весенний тест] .5.RELEASE.jar: 5.1.5.RELEASE] в org.junit.runner.JUnitCore.run (JUnitCore. java: 137) [junit-4.12.jar: 4.12] в com.intellij.junit4.JUnit4IdeaTestRunner. startRunnerWithArgs (JUnit4IdeaTestRunner. java: 68) [junit-rt.jar: na] в com.intellij.rt.execution.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs (IdeaTestRunner. * 10jt-47): : na] at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart (JUnitStarter. java: 242) [junit-rt.jar: na] в com.intellij.rt.execution.junit.JUnitStarter.main ( JUnitStarter. java: 70) [junit-rt.jar: na] Вызвано: org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании бина с именем 'monitorApplication': неудовлетворенная зависимость, выражаемая через поле 'MonitoringProperties'; Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа «MonitoringProperties»: ожидается как минимум один компонент, который считается кандидатом в автопровод. Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = true)} в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredEntation 5 -beans-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata. java: 90) ~ [spring-beans-5.1.5. RELEASE.jar: 5.1.5.RELEASE] в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties (AutowiredAnnotationBeanPostProcessor. java: 374) ~ [spring-beans-5.1.5jar .RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory. java: 1395) ~ [spring-beans-5.1.5.RELEASE.jars.rag или .beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory. java: 592) ~ [spring- beans-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory. java: 515) ~ [Spring-beans .jar: 5.1.5.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory. java: 320) ~ [spring-beans-5.1.5.RELEASE.jar: 5.1 .5.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry. java: 222) ~ [spring-beans-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org .springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory. java: 318) ~ [spring-beans-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.springframework.beans.factory. support.AbstractBeanFactory.getBean (AbstractBeanFactory. java: 199) ~ [spring-beans-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.springframework.beans.factory.support.DefaultListableBeanFactory.prelette . * 10 58 *: 849) ~ [spring-beans-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext. java: 877) ~ [spring- context-5.1.5.RELEASE.jar: 5.1.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refre sh (AbstractApplicationContext. java: 549) ~ [spring-context-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.springframework.boot.SpringApplication.refre sh (SpringApplication. java: 775) ~ [ spring-boot-2.1.3.RELEASE.jar: 2.1.3.RELEASE] в org.springframework.boot.SpringApplication.refreshContext (SpringApplication. java: 397) ~ [spring-boot-2.1.3.RELEASE.jar : 2.1.3.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication. java: 316) ~ [spring-boot-2.1.3.RELEASE.jar: 2.1.3.RELEASE] в org.springframework .boot.test.context.SpringBootContextLoader.loadContext (SpringBootContextLoader. java: 127) ~ [spring-boot-test-2.1.3.RELEASE.jar: 2.1.3.RELEASE] в org.springframework.test.context. cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal (DefaultCacheAwareContextLoaderDelegate. java: 99) ~ [spring-test-5.1.5.RELEASE.jar: 5.1.5.RELEASE] в org.springframework.test.context.cacheContext () . java: 117) ~ [spring-test-5.1.5.RELEASE.jar : 5.1.5.RELEASE] *

Я никогда не пишу интеграционные тесты и не понимаю, что я делаю неправильно? Какая проблема это может быть? Как я понимаю, я должен добавить @ComponentScan или что-то вроде этого?

1 Ответ

2 голосов
/ 20 января 2020

если вы хотите написать Integration Test, используйте SpringBootTest

@ SpringBootTest аннотация загрузит полностью ApplicationContext

, а

Аннотация @WebMvcTest загрузит только уровень контроллера приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...