Spring boot 测试期间无法阻止couchbase自动配置

Spring boot 测试期间无法阻止couchbase自动配置,spring-boot,spring-data,couchbase,spring-boot-test,spring-data-couchbase,Spring Boot,Spring Data,Couchbase,Spring Boot Test,Spring Data Couchbase,我试图阻止应用程序在运行单元测试时尝试连接到DB。以下是我所做的 @SpringBootApplication(exclude = { CouchbaseDataAutoConfiguration.class, CouchbaseAutoConfiguration.class, }) @ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE

我试图阻止应用程序在运行单元测试时尝试连接到DB。以下是我所做的

@SpringBootApplication(exclude = {
        CouchbaseDataAutoConfiguration.class,
        CouchbaseAutoConfiguration.class,
    })
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {
        ApplicationStartup.class, MessageApplication.class }))
public class MessageApplicationTests {

    public static void main(String[] args) {
        SpringApplication.run(MessageApplicationTests.class, args);
    }

}
除此之外,我还在application-test.yml中添加了以下内容

spring:
  autoconfigure:
    exclude:
      - org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration
      - org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration
      - org.springframework.cloud.aws.autoconfigure.messaging.MessagingAutoConfiguration
  
两者都没有帮助。
有人能帮我理解这里的错误吗?

还排除了您的配置类(扩展AbstractCouchbaseConfig的类) 但是,如果您有任何对存储库的引用,例如通过Autowire或作为参数对@Service构造函数的引用,则应用程序将无法启动。当我尝试排除自动配置类时,它似乎并不重要

@ComponentScan(excludeFilters=@ComponentScan.Filter(类型=FilterType.ASSIGNABLE_类型,值={ ApplicationStartup.class、MessageApplication.class、Config.class})


可能与您的问题无关,但我发现有多个@SpringBootApplication类(您有MessageApplication和MessageApplicationTests,对吧?),Spring会为这两个类执行自动配置类,而不仅仅是

run(MessageApplicationTests.class,args)),这样就需要两个类上的@springbootcapplication excludes来完全排除它们(尽管我发现排除并没有改变任何事情)。

Michael Reiche给出的上述答案是正确的。补充几点来解决他提出的问题

我们需要排除Couchbase的配置类。但是自动连线的存储库bean会产生一个问题

为了解决这个问题,我们可以模拟存储库bean,这样它就不会试图创建实际的存储库bean并将它们加载到上下文中

在排除列表中不包括自动配置类对我来说很重要,因为它会尝试配置Couchbase,因为依赖项在类路径中

@SpringBootApplication(exclude = { 
        CouchbaseDataAutoConfiguration.class, CouchbaseAutoConfiguration.class,
        CouchbaseRepositoriesAutoConfiguration.class, CouchbaseReactiveDataAutoConfiguration.class,
        CouchbaseReactiveHealthContributorAutoConfiguration.class

})
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {
        ApplicationStartup.class, MessageApplication.class , CouchBaseConfiguration.class }))
public class MessageApplicationTests {

    @MockBean
    Repositoryclass repoBean;


SpringDataCouchbase项目测试提供了一个模拟couchbase服务器(src/test/resources/integration.properties->mocked),或者可以使用一个独立的couchbase服务器(非托管)。这可能对您的测试有用

@SpringBootApplication(exclude = { 
        CouchbaseDataAutoConfiguration.class, CouchbaseAutoConfiguration.class,
        CouchbaseRepositoriesAutoConfiguration.class, CouchbaseReactiveDataAutoConfiguration.class,
        CouchbaseReactiveHealthContributorAutoConfiguration.class

})
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {
        ApplicationStartup.class, MessageApplication.class , CouchBaseConfiguration.class }))
public class MessageApplicationTests {

    @MockBean
    Repositoryclass repoBean;