java - Spring Integration 测试加载注解 Bean

标签 java spring-boot integration-testing junit4

由于某些原因,当我单独使用@ComponentScan 时,我的 DAO 没有加载。

我的 DAO:

@Repository
public class MyDAO{
  @Autowire
  private Datasource ds;
}

我的配置类(只是用嵌入式数据库覆盖数据源 bean):

@Configuration
public class TestConfig extends AppConfig {

    @Bean
    public Datasource getDatasource() throws Exception{...}

我的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
@ComponentScan
public class MyDAOTest {

    @Autowired
    private MyDAO target;

我的理解是@ComponentScan 应该能够找到 MyDAO 并加载它(TestConfig 类中的数据源加载得很好)。但是,未加载 MyDAO。我收到“org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为 [com.acme.dao.MyDAO] 的符合条件的 bean 以获取依赖项。”我还尝试在 @ComponentScan 中指定包,例如 com.acme 或 com.acme.dao。

当我将 MyDAO.class 作为类之一包含在 @ContextConfiguration 中时,它工作正常。但是,我不想列出我的集成测试的所有类...

最佳答案

以下设置将从 AppConfig 加载默认 bean,同时覆盖 TestConfig 中指定的任何 bean。 TestConfig 可以是一个嵌套类(在 MyDAOTest 中),只要它被声明为静态即可。

@ContextConfiguration( classes = TestConfig.class )
@RunWith(SpringJUnit4ClassRunner.class)
public class MyDAOTest {
    ...
}

@Import(AppConfig.class)
public class TestConfig {
    @Bean public Datasource getDatasource() throws Exception {...}
}

@Configuration
@ComponentScan( basePackages = {"com.acme"})
public class AppConfig {
    ....
}

关于java - Spring Integration 测试加载注解 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30625394/

相关文章:

java - BigDecimal 格式

java - java中不同类型的多维数组

java - 如何清除 JDateChooser 字段?

mysql - 为独立的 Spring Boot 应用程序设置 MySQL 数据库以在另一个设备中使用

linux - 自动化命令行应用程序的集成测试

java - Google App Engine 数据存储集成测试

java - 如何使用easymock模拟类中的静态方法?

Spring boot Rest API,Angular 6 SSO 社交登录

java - 如何在 gitlab-ci.yml 中向我的 gitlab-ci 作业添加计时器以使其在 1 分钟内停止

ruby-on-rails - capybara :如何断言给定数量的元素存在