我想尝试使用嵌入式数据库在Spring应用程序中测试我的DAO对象。
在应用程序上下文中,我有这个标签:
<jdbc:embedded-database id="dataSourceEmbedded" type="HSQL">
<jdbc:script location="classpath:/embeddeddb/schema.sql" />
<jdbc:script location="classpath:/embeddeddb/data.sql" />
</jdbc:embedded-database>
我的JUnit测试类需要使用这个bean:
import org.apache.log4j.Logger;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/applicationContext.xml")
public class PartnerDAOTest {
@Autowired
@Qualifier("dataSourceEmbedded")
public EmbeddedDatabase dataSourceEmbedded;
@Test
public void testSavePartner() {
}
}
一切正常(“dataSourceEmbedded”bean已创建)但是当我尝试在PartnerDAOTest类中自动装配它时,Spring会抛出此异常:
testSavePartner(sandbox.PartnerDAOTest): 使用名称创建bean时出错 'sandbox.PartnerDAOTest':注入 自动连接依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:public org.springframework.jdbc.datasource.embedded.EmbeddedDatabase sandbox.PartnerDAOTest.dataSourceEmbedded; 嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 合格的bean类型 找到[org.springframework.jdbc.datasource.embedded.EmbeddedDatabase] 对于依赖:预计至少有1个bean有资格作为autowire 这种依赖的候选人。依赖注释: {@ org.springframework.beans.factory.annotation.Autowired(所需=真), @ org.springframework.beans.factory.annotation.Qualifier(值= dataSourceEmbedded)}
我的代码出了什么问题?
答案 0 :(得分:0)
正如@ M.Deinum在评论中注意到的那样:
没有类型为EmbeddedDatabase的bean有一个DataSource。 嵌入式数据库最终创建的数据源不是 EmbeddedDatabase。