`

基于Spring事务的集成测试

阅读更多

基于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());

    }

}

 

 

 

分享到:
评论

相关推荐

    Spring中进行集成测试

    10. **Spring Boot Test**:对于基于Spring Boot的应用,`@SpringBootTest`注解可以启动整个应用,允许对所有层进行完整的集成测试。同时,Spring Boot还提供了许多针对特定功能的注解,如`@SpringBootTest...

    spring基于AspectJ实现事务控制

    5. **测试事务控制**:编写单元测试或者集成测试来验证事务的正确性,确保在预期的情况下事务能够正常提交或回滚。 总的来说,Spring结合AspectJ提供的事务控制方式,让开发者能更专注于业务逻辑,而不是事务管理的...

    MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件

    首先,`MyBatis`是MyBatis-Spring的集成,它为Spring环境下的MyBatis提供了一个简单的配置和强大的事务管理。通过Spring的Bean管理,我们可以方便地在Service层注入Mapper接口,无需编写DAO层,使得代码更加简洁。 ...

    Spring与Hibernate集成

    6. **测试和运行**: 最后,编写测试用例验证Spring和Hibernate的集成是否成功。运行应用,确保数据的持久化和检索功能正常工作。 在实际开发中,为了提高代码的可读性和可维护性,我们可以采用基于注解的配置和实体...

    使用 Spring 2.5 TestContext 测试框架

    总结,Spring 2.5 TestContext测试框架为开发者提供了一套完整的测试解决方案,包括上下文配置、依赖注入、事务管理和mock对象。通过合理利用这些特性,我们可以编写出高效、易于维护的测试代码,确保应用程序的质量...

    SPRING ,HIBERNATE,MYBATIS重构系统(带spring事务测试及spring Restful测试)

    在"spring事务测试"中,Spring提供了声明式事务管理,可以在配置文件中或注解中定义事务边界,简化了事务处理。 Hibernate框架: Hibernate是Java世界中最流行的ORM框架之一,它允许开发者通过Java对象来操作数据库...

    Spring分布式事务实现

    在Spring中集成JOTM,可以利用其功能来管理跨数据库的事务。 JOTM相关的jar包包括`jotm-core.jar`,`xapool.jar`,`ow2-connector-1.5-spec.jar`和`ow2-jta-1.1-spec.jar`。这些库提供了JOTM的核心实现和连接池支持...

    基于Spring cloud Alibaba,Oauth2,基于VUE的后台权限管理框架,集成了基于MQ的可靠消息的分布式事务解决方案。

    关于分布式事务,本框架集成了一种基于消息队列(MQ)的可靠消息驱动的解决方案。在分布式环境中,事务的处理变得复杂,因为操作可能分布在多个节点上。通过MQ,如RabbitMQ或RocketMQ,可以在系统间异步传递事务操作...

    基于Spring的在线购物商城

    总之,基于Spring的在线购物商城是一个集成了多种技术的综合项目,涉及到前端UI设计、后端业务逻辑处理、数据库操作以及系统架构设计等多个方面。通过这个项目,开发者可以深入理解Spring框架的运用,同时提升在电商...

    struts2 spring hibernate集成

    Struts2主要用于控制应用程序的流程,Spring提供全面的依赖注入和事务管理,而Hibernate则是优秀的对象关系映射(ORM)框架,使得开发者可以方便地操作数据库。 **Struts2** 是一个基于MVC设计模式的开源框架,它...

    Drools与Spring集成 登录测试

    Spring容器负责管理对象的生命周期和依赖关系,使得我们可以轻松地集成各种服务,包括数据库访问、事务管理等。在Drools与Spring的集成中,Spring将扮演容器的角色,负责初始化和管理Drools的相关组件。 Drools与...

    spring声明式事务处理demo

    首先,我们要理解Spring事务管理的两种主要方式:编程式事务管理和声明式事务管理。编程式事务管理通常通过AOP(面向切面编程)的TransactionTemplate或PlatformTransactionManager接口直接在代码中控制事务,而声明...

    基于spring boot的后台管理系统源码.rar

    7. **自动化测试**:Spring Boot的测试支持非常强大,源码中的JUnit测试类展示了如何编写单元测试和集成测试,确保代码质量。 8. **监控与日志**:Spring Boot集成了Actuator模块,提供健康检查、指标展示等功能。...

    Spring集成Jpa(Hibernate实现)

    11. **测试**:在集成测试中,可以使用`@DataJpaTest`和`@AutoConfigureTestDatabase`注解来验证JPA配置和操作是否正确。 这个"Spring集成JPA(Hibernate实现)"的例子,涵盖了从基础配置到实际使用的完整流程,对于...

    Spring Boot整合Spring Batch,实现批处理

    首先,**Spring Boot** 是一种基于Spring框架的简化版启动器,它极大地减少了传统Spring应用的配置工作。通过自动配置和“起步依赖”(Starter Dependency),Spring Boot使得创建独立的、生产级别的Java应用变得...

    struts+spring集成

    在集成过程中,通常会用Spring来管理Struts中的Action类,实现Action的依赖注入,从而提高代码的可测试性和解耦性。下面将详细讲解这个集成过程中的关键知识点: 1. **依赖注入**:Spring通过DI机制,可以在运行时...

    基于spring的Mina框架

    更复杂的测试可以通过编写集成测试用例来实现,确保业务逻辑的正确性。 总的来说,基于Spring的Mina框架结合了Spring的灵活性和Mina的高性能,为企业级的网络通信服务提供了强大的解决方案。开发者可以通过熟练掌握...

    ssh集成jar包,支持spring集成Hibernate,spring集成struts2等

    - Spring与Hibernate集成,通常使用Spring的HibernateTemplate或HibernateDaoSupport,提供事务管理和数据访问抽象,使得代码更简洁,事务控制更方便。 - Spring与Struts2集成,Spring可以作为Struts2的Action的...

    spring-boot 各种集成各种demo例子

    10. **测试**:Spring Boot 提供了测试支持,如 `spring-boot-starter-test` 包含了 JUnit、Mockito、Hamcrest 等测试库,方便编写单元测试和集成测试。 在 `spring-boot-master` 这个压缩包中,你可能会看到多个子...

    java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip

    本项目"java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip"是一个基于若依(RuoYi)框架改造的多模块分布式事务解决方案,它利用了Atomikos这一强大的分布式事务管理器。以下将详细解析这个项目的知识点...

Global site tag (gtag.js) - Google Analytics