如何加载mongo存储库以弹出测试应用程序上下文?

问题描述 投票:0回答:1

我必须为一些弹簧应用程序实现一些测试。我在测试中使用@SpringBootTest注释:

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

它工作正常,但我不想加载所有应用程序上下文,并通过添加一个或多个nessecary配置类来限制它。我用@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)用@DataMongoTest替换@SpringBootTest。我收到错误无法检索@EnableAutoConfiguration基础包

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

3)@DataMongoTest用@Import替换@ContextHierarchy。使用@Import注释,它会加载所有应用程序上下文。这不适合我。

 @DataMongoTest
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 @Import(SomeCofigClass1::class, SomeConfigClass2::class)
spring spring-data-mongodb spring-test
1个回答
0
投票

添加@RunWith(SpringRunner.class)以在测试期间加载Spring的ApplicationContext

此外,可以使用@SpringBootTest#classes属性(或@ContextConfiguration)

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

如果您的测试使用内部配置类,请确保将它们设为static(并添加@Configuration)。从文档:

如果省略@ContextConfiguration批注中的classes属性,TestContext框架将尝试检测是否存在默认配置类。具体来说,AnnotationConfigContextLoader和AnnotationConfigWebContextLoader将检测满足配置类实现要求的测试类的所有静态嵌套类,如@Configuration javadoc中所指定。

© www.soinside.com 2019 - 2024. All rights reserved.