【问题标题】:Waht is wrong with my @DataMongoTest - throwing org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type我的@DataMongoTest 有问题 - 抛出 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type
【发布时间】:2021-02-26 10:27:17
【问题描述】:

您好,我正在使用带有 Spring Boot 2.3.5.RELEASE 版本的 MongoDB 事务功能。我收到以下异常。我正在用控制器类编写集成测试。

下面给出的例外。

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.app.cat.resource.Test0': Unsatisfied dependency expressed through field 'controller'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.dell.pde.resources.NVTValidationCategoryController' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPost

我在下面提供代码sn-p。

@Profile("test")
@ActiveProfiles("test")
@DataMongoTest(excludeAutoConfiguration = MongoDBTxnConfiguration.class)
@Import(TestMongoConfig1.class)

@EnableAutoConfiguration(exclude={ SecurityAutoConfiguration.class, DataSourceAutoConfiguration.class, RedisAutoConfiguration.class,
    RedisRepositoriesAutoConfiguration.class,  
    SecurityFilterAutoConfiguration.class, SecurityAutoConfiguration.class })

@SpringBootApplication(scanBasePackages = {"com.app.cat"})
public class Test0 {
    
    @Autowired
    private CategoryController controller;
    
    @Autowired
    @Qualifier("validations")
    private ValidationService vldnService;
    
    @Test
    void testAllValidationsBeforeEntry() {
        System.out.println("controller : " + vldnService);
        assertEquals(true, true);
    }
}

请指导我做错了什么。请帮帮我。

【问题讨论】:

    标签: java spring mongodb spring-boot


    【解决方案1】:

    @DataMongoTest 注解也使用@AutoConfigureDataMongo@ImportAutoConfiguration。如果您提供自动配置的类,它将发生冲突。您必须使用@DataMongoTest 排除其他要加载和运行的类。因为它是一个测试类,所以不要使用@SpringBootApplication(scanBasePackages = {"com.app.cat"})。最后我提供了可能对你有帮助的位码sn-p。

    @DataMongoTest(excludeAutoConfiguration = {SecurityAutoConfiguration.class, 
            SecurityFilterAutoConfiguration.class, 
            SecurityAutoConfiguration.class, ... <any other configuration>})
    @Profile("test")
    @ComponentScan(basePackages = {"com.app.cat"}, excludeFilters={
              @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, 
                      value= {MongoDBTxnConfiguration.class,SecurityCloudConfig.class})})
    
    public class Test {
        @Autowired
        private YourControler ctrlr;
        
        
        @Test
        void test1() {
            // Logic for testing
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-27
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 2016-11-07
      • 2018-01-02
      • 2022-10-14
      • 2022-12-02
      相关资源
      最近更新 更多