基于Spring事务的集成测试

本文介绍了一个基于Spring框架的事务集成测试方案。通过配置数据源、事务管理器等组件,搭建了支持事务回滚的测试环境。并通过扩展Spring的抽象事务测试类,实现了自动配置和清理测试数据的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    }

}

 

 

 

内容概要:本文档详细介绍了基于Google Earth Engine (GEE) 构建的阿比让绿地分析仪表盘的设计与实现。首先,定义了研究区域的几何图形并将其可视化。接着,通过云掩膜函数和裁剪操作预处理Sentinel-2遥感影像,筛选出高质量的数据用于后续分析。然后,计算中值图像并提取NDVI(归一化差异植被指数),进而识别绿地及其面积。此外,还实现了多个高级分析功能,如多年变化趋势分析、人口-绿地交叉分析、城市热岛效应分析、生物多样性评估、交通可达性分析、城市扩张分析以及自动生成优化建议等。最后,提供了数据导出、移动端适配和报告生成功能,确保系统的实用性和便捷性。 适合人群:具备一定地理信息系统(GIS)和遥感基础知识的专业人士,如城市规划师、环境科学家、生态学家等。 使用场景及目标:①评估城市绿地分布及其变化趋势;②分析绿地与人口的关系,为城市规划提供依据;③研究城市热岛效应及生物多样性,支持环境保护决策;④评估交通可达性,优化城市交通网络;⑤监测城市扩张情况,辅助土地利用管理。 其他说明:该系统不仅提供了丰富的可视化工具,还集成了多种空间分析方法,能够帮助用户深入理解城市绿地的空间特征及其对环境和社会的影响。同时,系统支持移动端适配,方便随时随地进行分析。用户可以根据实际需求选择不同的分析模块,生成定制化的报告,为城市管理提供科学依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值