基于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());
}
}
分享到:
相关推荐
10. **Spring Boot Test**:对于基于Spring Boot的应用,`@SpringBootTest`注解可以启动整个应用,允许对所有层进行完整的集成测试。同时,Spring Boot还提供了许多针对特定功能的注解,如`@SpringBootTest...
5. **测试事务控制**:编写单元测试或者集成测试来验证事务的正确性,确保在预期的情况下事务能够正常提交或回滚。 总的来说,Spring结合AspectJ提供的事务控制方式,让开发者能更专注于业务逻辑,而不是事务管理的...
首先,`MyBatis`是MyBatis-Spring的集成,它为Spring环境下的MyBatis提供了一个简单的配置和强大的事务管理。通过Spring的Bean管理,我们可以方便地在Service层注入Mapper接口,无需编写DAO层,使得代码更加简洁。 ...
6. **测试和运行**: 最后,编写测试用例验证Spring和Hibernate的集成是否成功。运行应用,确保数据的持久化和检索功能正常工作。 在实际开发中,为了提高代码的可读性和可维护性,我们可以采用基于注解的配置和实体...
总结,Spring 2.5 TestContext测试框架为开发者提供了一套完整的测试解决方案,包括上下文配置、依赖注入、事务管理和mock对象。通过合理利用这些特性,我们可以编写出高效、易于维护的测试代码,确保应用程序的质量...
在"spring事务测试"中,Spring提供了声明式事务管理,可以在配置文件中或注解中定义事务边界,简化了事务处理。 Hibernate框架: Hibernate是Java世界中最流行的ORM框架之一,它允许开发者通过Java对象来操作数据库...
在Spring中集成JOTM,可以利用其功能来管理跨数据库的事务。 JOTM相关的jar包包括`jotm-core.jar`,`xapool.jar`,`ow2-connector-1.5-spec.jar`和`ow2-jta-1.1-spec.jar`。这些库提供了JOTM的核心实现和连接池支持...
关于分布式事务,本框架集成了一种基于消息队列(MQ)的可靠消息驱动的解决方案。在分布式环境中,事务的处理变得复杂,因为操作可能分布在多个节点上。通过MQ,如RabbitMQ或RocketMQ,可以在系统间异步传递事务操作...
总之,基于Spring的在线购物商城是一个集成了多种技术的综合项目,涉及到前端UI设计、后端业务逻辑处理、数据库操作以及系统架构设计等多个方面。通过这个项目,开发者可以深入理解Spring框架的运用,同时提升在电商...
Struts2主要用于控制应用程序的流程,Spring提供全面的依赖注入和事务管理,而Hibernate则是优秀的对象关系映射(ORM)框架,使得开发者可以方便地操作数据库。 **Struts2** 是一个基于MVC设计模式的开源框架,它...
Spring容器负责管理对象的生命周期和依赖关系,使得我们可以轻松地集成各种服务,包括数据库访问、事务管理等。在Drools与Spring的集成中,Spring将扮演容器的角色,负责初始化和管理Drools的相关组件。 Drools与...
首先,我们要理解Spring事务管理的两种主要方式:编程式事务管理和声明式事务管理。编程式事务管理通常通过AOP(面向切面编程)的TransactionTemplate或PlatformTransactionManager接口直接在代码中控制事务,而声明...
7. **自动化测试**:Spring Boot的测试支持非常强大,源码中的JUnit测试类展示了如何编写单元测试和集成测试,确保代码质量。 8. **监控与日志**:Spring Boot集成了Actuator模块,提供健康检查、指标展示等功能。...
11. **测试**:在集成测试中,可以使用`@DataJpaTest`和`@AutoConfigureTestDatabase`注解来验证JPA配置和操作是否正确。 这个"Spring集成JPA(Hibernate实现)"的例子,涵盖了从基础配置到实际使用的完整流程,对于...
首先,**Spring Boot** 是一种基于Spring框架的简化版启动器,它极大地减少了传统Spring应用的配置工作。通过自动配置和“起步依赖”(Starter Dependency),Spring Boot使得创建独立的、生产级别的Java应用变得...
在集成过程中,通常会用Spring来管理Struts中的Action类,实现Action的依赖注入,从而提高代码的可测试性和解耦性。下面将详细讲解这个集成过程中的关键知识点: 1. **依赖注入**:Spring通过DI机制,可以在运行时...
更复杂的测试可以通过编写集成测试用例来实现,确保业务逻辑的正确性。 总的来说,基于Spring的Mina框架结合了Spring的灵活性和Mina的高性能,为企业级的网络通信服务提供了强大的解决方案。开发者可以通过熟练掌握...
- Spring与Hibernate集成,通常使用Spring的HibernateTemplate或HibernateDaoSupport,提供事务管理和数据访问抽象,使得代码更简洁,事务控制更方便。 - Spring与Struts2集成,Spring可以作为Struts2的Action的...
10. **测试**:Spring Boot 提供了测试支持,如 `spring-boot-starter-test` 包含了 JUnit、Mockito、Hamcrest 等测试库,方便编写单元测试和集成测试。 在 `spring-boot-master` 这个压缩包中,你可能会看到多个子...
本项目"java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip"是一个基于若依(RuoYi)框架改造的多模块分布式事务解决方案,它利用了Atomikos这一强大的分布式事务管理器。以下将详细解析这个项目的知识点...