出于某种原因,当我单独使用@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中的一个类包含时,它可以正常工作。但是,我不想列出集成测试的所有类......
答案 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 {
....
}