【问题标题】:Cannot autowire Spring bean in JUnit test class无法在 JUnit 测试类中自动装配 Spring bean
【发布时间】:2014-03-11 00:42:42
【问题描述】:

我想尝试使用嵌入式数据库在 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:不能 自动装配字段:公共 org.springframework.jdbc.datasource.embedded.EmbeddedDatabase sandbox.PartnerDAOTest.dataSourceEmbedded; 嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 符合条件的 bean 类型 [org.springframework.jdbc.datasource.embedded.EmbeddedDatabase] 找到 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=dataSourceEmbedded)}

我的代码有什么问题?

【问题讨论】:

  • 堆栈跟踪是显式的:创建名称为 sandbox.PartnerDAOTest 的 bean 时出错:自动装配依赖项注入失败。无法自动装配字段:public org.springframework.jdbc.datasource.embedded.EmbeddedDatabase.
  • 好的,谢谢,我可以阅读异常,但我确信一切正常(或者我不知道出了什么问题),因为创建了 bean...
  • 嗯,不是这样,否则注射是对的。我的意思是,以您发布的当前信息无法检查问题。
  • 检查问题还需要哪些信息?
  • 没有EmbeddedDatabase 类型的bean 有DataSourceembedded-database 最终会创建 DataSource 而不是 EmbeddedDatabase

标签: java spring junit hsqldb embedded-database


【解决方案1】:

正如@M.Deinum 在他的评论中注意到的那样:

没有 EmbeddedDatabase 类型的 bean 有一个 DataSource。 嵌入式数据库最终会创建一个 DataSource 而不是 嵌入式数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-09
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2011-04-09
    • 2016-09-27
    相关资源
    最近更新 更多