Spring 集成测试加载注释 Bean
Spring Integration Test Loading Annotated Beans
出于某种原因,当我单独使用@ComponentScan 时,我的 DAO 没有加载。
我的 DAO:
@Repository
public class MyDAO{
@Autowire
private Datasource ds;
}
我的配置 class(只是用嵌入式数据库覆盖数据源 bean):
@Configuration
public class TestConfig extends AppConfig {
@Bean
public Datasource getDatasource() throws Exception{...}
我的测试Class:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
@ComponentScan
public class MyDAOTest {
@Autowired
private MyDAO target;
我的理解是@ComponentScan 应该能够找到 MyDAO 并加载它(TestConfig class 中的数据源加载得很好)。但是,未加载 MyDAO。我得到 "org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.acme.dao.MyDAO] found for dependency." 我还尝试在 @ComponentScan 中指定包,例如 com.acme 或 com.acme.dao。
当我将 MyDAO.class 作为 class 之一包含在 @ContextConfiguration 中时,它工作正常。但是,我不想为我的集成测试列出所有 classes...
以下设置将从 AppConfig 加载默认 bean,同时覆盖 TestConfig 中指定的任何 bean。 TestConfig 可以是嵌套的 class(在 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 {
....
}
出于某种原因,当我单独使用@ComponentScan 时,我的 DAO 没有加载。
我的 DAO:
@Repository
public class MyDAO{
@Autowire
private Datasource ds;
}
我的配置 class(只是用嵌入式数据库覆盖数据源 bean):
@Configuration
public class TestConfig extends AppConfig {
@Bean
public Datasource getDatasource() throws Exception{...}
我的测试Class:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
@ComponentScan
public class MyDAOTest {
@Autowired
private MyDAO target;
我的理解是@ComponentScan 应该能够找到 MyDAO 并加载它(TestConfig class 中的数据源加载得很好)。但是,未加载 MyDAO。我得到 "org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.acme.dao.MyDAO] found for dependency." 我还尝试在 @ComponentScan 中指定包,例如 com.acme 或 com.acme.dao。
当我将 MyDAO.class 作为 class 之一包含在 @ContextConfiguration 中时,它工作正常。但是,我不想为我的集成测试列出所有 classes...
以下设置将从 AppConfig 加载默认 bean,同时覆盖 TestConfig 中指定的任何 bean。 TestConfig 可以是嵌套的 class(在 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 {
....
}