【问题标题】:@DataMongoTest() is not working - throwing Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException@DataMongoTest() 不起作用 - 抛出原因:org.springframework.beans.factory.NoSuchBeanDefinitionException
【发布时间】:2021-02-26 08:52:36
【问题描述】:

我正在使用 MongoDB 事务功能,我正在使用 Spring Boot 2.3.5.RELEASE。我正在为集成测试的控制器类编写单元测试。我面临以下异常。请帮我。让我知道我哪里做错了。

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.app.rain.resources.ValidationCategoryController' 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.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1717) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1273) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    ... 71 common frames omitted

我在下面提供了相关代码。

下面是配置类。

@EnableAutoConfiguration(exclude={ SecurityAutoConfiguration.class, DataSourceAutoConfiguration.class, 
        RedisAutoConfiguration.class,
RedisRepositoriesAutoConfiguration.class, MongoAutoConfiguration.class, 
        SecurityFilterAutoConfiguration.class, SecurityAutoConfiguration.class })
@SpringBootApplication(scanBasePackages = { "com.app.rain"}, exclude={SecurityAutoConfiguration.class})
public class Test1Config {

}

下面是控制器的测试。

@ActiveProfiles("test")
@DataMongoTest()
//@ExtendWith(SpringExtension.class)
//@ContextConfiguration(classes = ValidationApplication.class)

@ContextConfiguration(classes = {
        Test1Config.class,
    })
@ImportAutoConfiguration(TransactionAutoConfiguration.class)
public class Test0 {
    @Autowired
    private ValidationCategoryController controller;
    
    @Autowired
    @Qualifier("validations")
    private ValidationService vldnService;
    
    @Test
    void testAllValidationsBeforeEntry() {
        System.out.println("controller : " + controller);
        assertEquals(true, true);
    }
}

请帮我解决。我也看过这个@DataMongoTest fails because of UnsatisfiedDependencyException。没有答案。

【问题讨论】:

    标签: java spring mongodb spring-boot


    【解决方案1】:

    苦苦挣扎了好几个小时,终于找到了解决办法。它可能对某人有帮助。我把代码贴在这里。

    @DataMongoTest(excludeAutoConfiguration = {SecurityAutoConfiguration.class,
            RedisAutoConfiguration.class, MongoDBTxnConfiguration.class,
            RedisRepositoriesAutoConfiguration.class, 
            SecurityFilterAutoConfiguration.class, 
            SecurityAutoConfiguration.class})
    @Profile("test")
    @ActiveProfiles("test")
    @ComponentScan(basePackages = {"com.app.rain"}, excludeFilters={
              @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, 
                      value= {MongoDBTxnConfiguration.class,SecurityCloudConfig.class})})
    @Import(TestMongoDBConfig.class)
    public class Test0 {
        @Autowired
        private ValidationCategoryController controller;
        
        @Autowired
        @Qualifier("validations")
        private ValidationService vldnService;
        
        @Test
        void testAllValidationsBeforeEntry() {
            System.out.println("controller : " + controller);
            assertEquals(true, true);
        }
    }
    

    TestMongoDBConfig 类如下所示。

    @Profile("test")
    @ActiveProfiles("test")
    @Configuration
    public class TestMongoDBConfig implements InitializingBean, DisposableBean {
    
        private MongodExecutable executable;
    
        
        @Override
        public void afterPropertiesSet() throws Exception {
    
            IFeatureAwareVersion version = de.flapdoodle.embed.mongo.distribution.Versions
                    .withFeatures(new GenericVersion("4.0.0"), Version.Main.PRODUCTION.getFeatures());
            IMongoCmdOptions cmdOptions = new MongoCmdOptionsBuilder().useNoPrealloc(false).useSmallFiles(false)
                    .master(false).verbose(false).useNoJournal(false).syncDelay(0).build();
            int port = Network.getFreeServerPort();
            IMongodConfig mongodConfig = new MongodConfigBuilder().version(version)
                    .net(new Net(port, Network.localhostIsIPv6())).replication(new Storage(null, "testRepSet", 5000))
    //            .configServer(true)
                    .configServer(false).cmdOptions(cmdOptions).build();
            MongodStarter starter = MongodStarter.getDefaultInstance();
            executable = starter.prepare(mongodConfig);
            executable.start();
        }
    
        
        @Primary
        @Bean(name = "test1")
        public MongoClient mongoClient() {
            MongoClient mongoClient = MongoClients.create();
            return mongoClient;
        }
    
        @Override
        public void destroy() throws Exception {
            executable.stop();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 2016-04-04
      • 2013-08-02
      相关资源
      最近更新 更多