我想对带有 Spring 测试框架的 DAO 使用两种不同的实现。
src.main.java
.businessobjects
\-User.java
.dao
\-IUserDAO.java
.daojpa
\-UserDAO.java
.daohibernate
\-UserDAO.java
弹簧测试用例:
src.test.java.base:
package base;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/hibernate-beans.xml")
@Transactional
public abstract class SpringTestCase {}
这是错误:
原因:java.lang.IllegalStateException:bean 类 [jpadao.UserDAO] 的注解指定的 bean 名称“userDAO”与现有的、不兼容的同名和类 bean 定义冲突 [jpaadao.UserDAO]
我已经尝试通过使用限定符来覆盖自动装配,例如:
<bean class="jpaadao.UserDAO">
<qualifier value="jpaa"/>
</bean>
<bean class="jpadao.UserDAO">
<qualifier value="jpa"/>
</bean>
然后在测试用例中接线
@Autowired
@Qualifier("jpa")
private IUserDAO userDAO;
但错误仍然存在。
两个问题:
- 如何使用基于注释的配置来解决这个问题?
- 如何在没有自动装配和注释的情况下运行测试?