【问题标题】:JUnit/Spring/Hibernate - No qualifying bean of type [javax.sql.DataSource]JUnit/Spring/Hibernate - 没有 [javax.sql.DataSource] 类型的限定 bean
【发布时间】:2015-03-27 10:59:00
【问题描述】:

org.springframework.beans.factory.BeanCreationException:创建名为“JobSeekerServiceTest”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配方法:public void org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests.setDataSource(javax.sql.DataSource);嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为 [javax.sql.DataSource] 的合格 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注释:{} 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1204) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:385) 在 org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117) 在 org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:82) 在 org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:199) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:251) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:253) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:216) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:82) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 在 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:60) 在 org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:67) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:309) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:162) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 原因:org.springframework.beans.factory.BeanCreationException:无法自动装配方法:public void org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests.setDataSource(javax.sql.DataSource);嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为 [javax.sql.DataSource] 的合格 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注释:{} 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) ... 26 更多 引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖找到[javax.sql.DataSource]类型的合格bean:预计至少有1个bean有资格作为此依赖的自动装配候选者。依赖注释:{} 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1261) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1009) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:600) ... 28 更多

测试类

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations="classpath*:spring-config.xml") 
@TransactionConfiguration(defaultRollback=true,transactionManager="txManager")
@Transactional
public class JobSeekerServiceTest extends AbstractTransactionalJUnit4SpringContextTests{

    private JobSeekerDao jobseekerDao = new JobSeekerDao();

    @Test
    public void testGetCandidateForEmail(){
        JobSeeker result = new JobSeeker();
        JobSeeker expected = new JobSeeker();
        expected.setName("Dummy Job seeker 1");expected.setEmail("email@yahoo.com");expected.setCity("City");expected.setPhone("04523122");

        result = jobseekerDao.getCandidateForEmail("email@yahoo.com");
        assertEquals(result, expected);
    }
}

求职者道

@SuppressWarnings("unchecked")
    @Override
    public JobSeeker getCandidateForEmail(String email) {
        LOGGER.debug("Searching the candidate after an email:"+email);
        Session session = getCurrentSession();

        List<JobSeeker> candidates = session.createQuery("from JobSeeker where email=?")
                .setParameter(0, email)
                .list();


        if (candidates.size() > 0) {
            return candidates.get(0);
        } else {
            return null;
        }
    }

Spring-Config.xml

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
            <property name="driverClassName"    value="${database.driver}" />  
            <property name="url"                value="${database.url}" />  
            <property name="username"           value="${database.user}" />  
            <property name="password"           value="${database.password}" />  
        </bean>  

        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
            <property name="dataSource" ref="dataSource" />
            <property name="packagesToScan" value="com.awinta.hrms"/>

            <property name="hibernateProperties">  
                <props>  
                    <prop key="hibernate.dialect">${hibernate.dialect}</prop>  
                    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                    <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
                    <prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>

                    <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>

                    <prop key="hibernate.temp.use_jdbc_metadata_defaults">${hibernate.temp.use_jdbc_metadata_defaults}</prop>

                    <prop key="hibernate.connection.pool_size">${hibernate.connection.pool_size}</prop>
                </props>  
            </property>  
        </bean> 

        <bean id="txManager" 
            class="org.springframework.orm.hibernate4.HibernateTransactionManager" 
            name="txManager">  
            <property name="sessionFactory" ref="sessionFactory" />
        </bean> 

任何想法为什么我会收到此错误?我是 Spring、Hibernate、JUnit 的新手。总之,我认为我应该以某种方式这样做。或者我应该怎么做这个测试课?

更新

我在某处读到问题是扩展 AbstractTransactionalJUnit4SpringContextTests,没有它我不会再收到此错误。

【问题讨论】:

    标签: java hibernate junit


    【解决方案1】:

    异常是让您知道测试类找不到任何合适的 JDBC 驱动程序。您应该将 JDBC 驱动程序添加到测试类路径以解决此问题

    【讨论】:

    • 您好,感谢您的回答。我试过了,我将 Postgres jar 文件添加到测试类路径,但错误仍然存​​在。
    猜你喜欢
    • 2015-12-24
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2020-02-05
    • 2016-11-17
    相关资源
    最近更新 更多