我正在为我的小应用程序的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" />
项目结构:
任何帮助将不胜感激。
更新
感谢asg's回复,我纠正了类路径拼写错误,但不幸的是,问题仍然存在
答案 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语句更改为上面编辑的语句。它应该适合你。