Spring Boot:如何在测试中添加Spring数据存储库

时间:2019-01-29 02:19:25

标签: java spring spring-boot spring-data spring-data-mongodb

在测试中,我可以添加任何bean(使用静态嵌套配置类)。但是如何添加spring-data存储库?我不能作为新bean返回,因为我无法实例化它们-它们是接口

@RunWith(SpringRunner.class)
@DataMongoTest
//@SpringBootTest   // or this annotation
public class JTest {

    @Configuration
    static class Config {

        static class TestEntity {
            String id;
        }

        interface TestRepository extends ReactiveMongoRepository<TestEntity, String> {}

    }

    @Autowired Config.TestRepository testRepository;

    @Test
    public void test() {}
}

运行@DataMongoTest给了我

  

原因:java.lang.IllegalStateException:无法检索@EnableAutoConfiguration基本包

运行@SpringBootTest会给出:

  

由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型为“ xxx.JTest $ Config $ TestRepository”的合格bean:期望至少有1个有资格作为自动装配候选的bean。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}

如何在测试中添加新存储库?

1 个答案:

答案 0 :(得分:2)

默认情况下,Spring不会选择嵌套的接口存储库(并实例化一个bean)。要启用,请参阅:

@RunWith(SpringRunner.class)
@DataMongoTest
@EnableMongoRepositories(considerNestedRepositories = true)
public class JobTest {

    @TestConfiguration
    static class Config {

        static class TestEntity {
            String id;
        }
    ....

如果没有其他规定,Spring在内部用new SimpleMongoRepository<T, ID>(..)注册一个bean。

编辑 刚意识到您正在使用反应式Mongo。因此请改用EnableReactiveMongoRepositories(..)