Как загрузить хранилище mongo в контекст приложения для весеннего тестирования? - PullRequest
0 голосов
/ 25 апреля 2019

Я должен выполнить тест для некоторого весеннего приложения.Я использую аннотацию @SpringBootTest в своем тесте:

  @SpringBootTest
  @TestInstance(TestInstance.Lifecycle.PER_CLASS)
  class MyTest(){
  //some tests...
  }

Он работает нормально, но я не хочу загружать весь контекст приложения и ограничивать его, добавляя один или несколько классов конфигурации.Я сделал это с помощью @ContextHierarchy:

 @SpringBootTest
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 @ContextHierarchy(ContextConfiguration(classes = [SomeCofigClass1::class, SomeConfigClass2::class]))
  class MyTest(){
  //some tests...
  }

 //for example
 class SomeCofigClass1(){
      @Bean
      fun(someMongoRepository: SomeMongoRepository){ \\<-- Problem is here
           return SomeService(someMongoRepository)
      }
 }

 /**
  * My repository.
  */
 interface SomeMongoRepository : MongoRepository<Job, String> {}

Из-за того, что контекст частично загружен, я получил ошибку:

  No qualifying bean of type 'SomeMongoRepository' available:....

Как я могу загрузить репозиторий в контексте тестового приложения?

Я уже пробовал:

1) Добавлен @AutoConfigureDataMongo.Я получил ошибку java.lang.IllegalStateException: невозможно получить базовые пакеты @EnableAutoConfiguration

 @SpringBootTest
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 @ContextHierarchy(ContextConfiguration(classes = [SomeCofigClass1::class, SomeConfigClass2::class]))
 @AutoConfigureDataMongo

2) Заменен @SpringBootTest на @DataMongoTest.Я получил ошибку Невозможно получить базовые пакеты @EnableAutoConfiguration

 @DataMongoTest
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 @ContextHierarchy(ContextConfiguration(classes = [SomeCofigClass1::class, SomeConfigClass2::class]))

3) С @DataMongoTest заменили @ContextHierarchy на @Import.С аннотацией @Import загружается весь контекст приложения.Это не подходит для меня.

 @DataMongoTest
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 @Import(SomeCofigClass1::class, SomeConfigClass2::class)

1 Ответ

0 голосов
/ 25 апреля 2019

Добавить @RunWith(SpringRunner.class) для загрузки Spring's ApplicationContext во время теста.

Кроме того, классы могут быть выбраны с помощью атрибута @SpringBootTest#classes (или @ContextConfiguration):

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {SomeCofigClass1.class, SomeConfigClass2.class})

Если в вашем тесте используются внутренние классы конфигурации, обязательно сделайте их статическими (и добавьте @Configuration). Из документации:

Если вы опустите атрибут classes из аннотации @ContextConfiguration, каркас TestContext попытается обнаружить наличие классы конфигурации по умолчанию. В частности, AnnotationConfigContextLoader и AnnotationConfigWebContextLoader обнаружить все статические вложенные классы тестового класса, которые соответствуют требования к реализации класса конфигурации, как указано в @ Конфигурация Javadoc.

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