基于Spring事务的集成测试

 一、 测试类和配置文件的目录结构
 test
            bbs.spring.common.test
                BaseTransactionalIntegrationTests
                applicationContext.xml

            bbs.spring.service.test
                TopicServiceImplTest
                applicationContext-test.xml


二、 applicationContext.xml配置
配置数据源、事务和依赖注入,暴露带事务的业务接口。
......
<!-- hibernateTemplate ..................................................... -->
 <bean id="hibernateTemplate"
  class="org.springframework.orm.hibernate3.HibernateTemplate">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>
 

 <!-- transactionManager .................................................... -->
 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
 </bean>


 <!-- 事务代理工厂bean模板 ................................................. -->
 <bean id="baseTransactionProxy" abstract="true"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager" ref="transactionManager" />
  <property name="proxyTargetClass" value="true" />
  <property name="transactionAttributes">
   <props>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>
 </bean>


 <!-- 实例化Dao .............................................................. -->
 <bean id="topicDao"
  class="org.eesite.bbs.hibernate.dao.TopicDaoImpl">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>


 <!-- Transactional proxy for the Application primary business object ..... -->
 <bean id="topicServiceTarget"
  class="org.eesite.bbs.spring.service.TopicServiceImpl">
  <property name="topicDao" ref="topicDao" />
 </bean>


 <!-- TransactionProxyFactoryBean ........................................... -->
 <bean id="topicService" parent="baseTransactionProxy">
  <description />
  <property name="proxyInterfaces">
   <list>
    <value>
     org.eesite.bbs.spring.service.ITopicService
    </value>
   </list>
  </property>
  <property name="target">
   <ref bean="topicServiceTarget" />
  </property>
 </bean>

三、 扩展Spring抽象事务测试类
package bbs.spring.common.test;

import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

/**
 * 扩展Spring抽象事务测试类, 注入hibernateTemplate, 实现getConfigLocations方法
 *
 * @author zhanjia
 *
 */
public abstract class BaseTransactionalIntegrationTests extends
  AbstractTransactionalDataSourceSpringContextTests {

 private HibernateTemplate hibernateTemplate;

 /**
  * @return the hibernateTemplate
  */
 public HibernateTemplate getHibernateTemplate() {
  return hibernateTemplate;
 }

 /**
  * @param hibernateTemplate
  *            the hibernateTemplate to set
  */
 public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
  this.hibernateTemplate = hibernateTemplate;
 }

 /*
  * (non-Javadoc)
  *
  * @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#getConfigLocations()
  */
 @Override
 protected String[] getConfigLocations() {
  setAutowireMode(AUTOWIRE_BY_NAME);
  return new String[] {
    "classpath:bbs/spring/common/test/applicationContext.xml",
    "classpath:bbs/spring/service/test/applicationContext-test.xml" };
 }

}


四、 applicationContext-test.xml配置
为测试类注入业务接口和hibernateTemplate
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <bean id="topicServiceImplTest"
  class="bbs.spring.service.test.TopicServiceImplTest">
  <property name="topicService" ref="topicService" />
  <property name="hibernateTemplate" ref="hibernateTemplate" />
 </bean>
</beans>


五、 测试类
package bbs.spring.service.test;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eesite.bbs.hibernate.vo.Sort;
import org.eesite.bbs.hibernate.vo.Topic;
import org.eesite.bbs.hibernate.vo.User;
import org.eesite.bbs.spring.service.ITopicService;

import bbs.spring.common.test.BaseTransactionalIntegrationTests;

/**
 * 主题测试类
 *
 * @author zhanjia
 *
 */
public class TopicServiceImplTest extends BaseTransactionalIntegrationTests {

 private static final Log log = LogFactory
   .getLog(TopicServiceImplTest.class);

 private ITopicService topicService;

 /**
  * @return the topicService
  */
 public ITopicService getTopicService() {
  return topicService;
 }

 /**
  * @param topicService
  *            the topicService to set
  */
 public void setTopicService(ITopicService topicService) {
  this.topicService = topicService;
 }

 public void testInsertTopic() {
  this.deleteFromTables(new String[] { "Topic", "Sort", "User" });
  // this.jdbcTemplate.execute("INSERT INTO ...");

  Sort sort = new Sort();
  sort.setId(new Long(1));
  sort.setSortName("分类1");
  sort.setDescription("");

  User user = new User();
  user.setId(new Long(1));
  user.setUserName("zhanjia");

  Topic topic = new Topic();
  topic.setId(new Long(1));
  topic.setTopicName("标题名");
  topic.setContent("");
  topic.setIcon("");
  topic.setSort(sort);
  topic.setUser(user);

  this.getTopicService().insertTopic(topic);
  
  List list = this.getHibernateTemplate().find("from Topic");
  assertEquals(1, list.size());
  
  Long count = this.jdbcTemplate.queryForLong("select count(*) from Topic");
  assertEquals(1, count.intValue());
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值