项目有两个并行的source folder:src/test。两个包的结构相同。目的:测试AccountDAO
配置文件ApplicationContext.xml:
<!-- 配置事务管理bean -->
<!--
不使用hibernate而是使用JDBC,class应该选择:org.springframework.orm.jdbc.datasource.DataSourceTransactionManager
-->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 真正的事务管理需要通过hibernate完成 ,所以要依赖注入一个sessionFactory-->
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 事务管理的逻辑。即对哪些方法调用选择何种事务模型
transaction-manager:真正管理事务的Java Bean
-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="test*" propagation="REQUIRED"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="find" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 对哪些Java Bean 进行事务管理
在实际的项目中进行事务管理的是业务对象business/service,即: pointcut="execution(* org.dfbz.myspring.business/service.*.*(..))
猜测:肯定是有差异的,不过一些细节上的处理,相信不是很麻烦,暂时未证明。。
-->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* org.dfbz.mobile.dao.*.*(..))"/>
</aop:config>
配置文件Application-test.xml:
<bean id="TestAccountDAO"
class="org.dfbz.mobile.dao.TestAccountDAO">
<property name="accountDAO" ref="AccountDAO" />
</bean>
测试类:
/**
* 初始化IoC容器
* @author liyuanyuan
*
* Oct 17, 2009
*/
public class BaseDAOTest extends TestCase {
protected static ApplicationContext ctx;
static{
ctx = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","applicationContext-test.xml"});
}
}
/**
* 测试AccountDAO
* @author liyuanyuan
*
* Oct 17, 2009
*/
public class TestAccountDAO extends BaseDAOTest {
private IAccountDAO accountDAO;
public void setAccountDAO(IAccountDAO accountDAO) {
this.accountDAO = accountDAO;
}
public void testShouldFindDefaultAccountById (){
System.out.println(ctx.getBean("TestAccountDAO"));
//accountDAO = (IAccountDAO)ctx.getBean("AccountDAO");
System.out.println(accountDAO);
//Account account = accountDAO.findById(1);
//assertNotNull(account);
}
}
我做测试的时候,IoC容器初始化没有报错,但是TestAccountDAO和accountDAO都是null。为什么呢?IoC容器已经初始化了呀!大家帮忙看下,直接把我的代码考去就可以了,不存在的类不是重点,做个mock就是了。