Spring集成测试加载带注释的Bean

时间:2015-06-03 16:11:34

标签: java spring-boot integration-testing junit4

出于某种原因,当我单独使用@ComponentScan时,我的DAO未加载。

我的道:

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

我的Config类(只是覆盖带有嵌入式数据库的数据源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中的一个类包含时,它可以正常工作。但是,我不想列出集成测试的所有类......

1 个答案:

答案 0 :(得分:3)

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

@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 {
    ....
}