Spring无法从app-config-text.xml

时间:2016-05-12 10:49:10

标签: java spring integration-testing hsqldb

我正在为我的小应用程序的DAO层开发集成测试,并遇到了问题。我使用2个不同的application-config.xml进行测试(用于使用HSQLDB)和生产(MySql)。 即使我在测试版中导入了我的生产配置文件,Spring仍然无法找到它。因此,没有找到类型为[DAO]的限定bean用于依赖(希望,这是由于此问题)。 既没有显示完整路径也没有使用** /或/ for xml文件。

我收到的例外:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.phoneBook.DAO.ContactDAO] found for dependency

我的测试班:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {"classpath:**/application-context-test.xml"/*, "/application-config.xml"*/})
    @TransactionConfiguration(transactionManager = "transactionManager",defaultRollback = true)
    @Transactional
    public class ContactTest {
    //various fields for tests  
@Inject
        private ContactDAO contactIntegrDAO;
        @Inject
        private UserDAO userItegrDAO;

// various test methods
}

如果我取消注释" /application-config.xml"在@ContextConfiguration中,我的测试配置(使用HSQLDB dataSource)根本没有启动,我在生产数据库上调用了所有集成测试。

在application-context-test.xml中测试配置:

<import resource="classpath:**/application-config.xml"/>

                               

application-config.xml中的生产配置:

<context:component-scan base-package="com.phoneBook" />

<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:properties/database.properties" />
</bean>
<!-- Alternative way to set database.properties -->
<!-- <context:property-placeholder location="classpath:properties\database.properties" 
    /> -->

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.phoneBook.entities" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
            <prop key="hibernate.flushMode">${hibernate.flushMode}</prop>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
        </props>
    </property>
</bean>

<bean id="persistenceExceptionTranslationPostProcessor"
    class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

项目结构:

enter image description here

任何帮助将不胜感激。

更新

感谢asg's回复,我纠正了类路径拼写错误,但不幸的是,问题仍然存在

1 个答案:

答案 0 :(得分:1)

您的测试应用程序上下文可能存在问题。

在application-context-test.xml中测试配置:

<import resource="clathpath:**/application-config.xml"/>

尝试将其更改为:

编辑:

<import resource="classpath:application-config.xml"/>

您正在将'src / resources / application-config.xml'xml文件导入'test / resources / application-config-test.xml'文件。

所以将import语句更改为上面编辑的语句。它应该适合你。