注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> 开源技术 >> Spring >> Java正文

基于Spring事务的集成测试

文章来源:中国IT实验室收集整理 作者:佚名 更新时间:2008-6-28 20:35:46 【 】 【加入收藏

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

    二、applicationContext.xml配置
    配置数据源、事务和依赖注入,暴露带事务的业务接口。
    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>
    ......

    <!-- 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抽象事务测试类
    Java代码
    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" };

        }

    }
    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代码
    <?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>
    <?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>
    五、测试类
    Java代码
    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());

        }

    }

  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     手机开发平台指南、教程和资料介绍
     关于什么叫面向接口编程
     编写高级JavaScript应用代码
     不要验证,直接转化科学计数法
     Eclipse插件开发中实现刷新和重编译介绍
     Java开源技术:Eclipse的使用技巧详解
     配置eclipse 3.2 使用JDK1.5中文JavaAPI
     集成Windows本地应用到Eclipse RCP 程序中
     hibernate.cfg.xml配置文件的说明
     eclipse开发jface时,main.class解决方法
    最 新 推 荐
     ibatis+spring 集成
     结合Spring2.0和ActiveMQ进行异步消息调用
     servlet中如何访问spring容器
     Spring MVC与struts比较
     Spring security 命名空间的使用
     spring AOP面向切面编程
     关于String对象解析
     关于Spring切点函数@args()
     Spring中事务的传播属性详解
     Spring+Ibatis+事务处理
    相 关 文 章

    ibatis+spring 集成
    结合Spring2.0和ActiveMQ进行异步消息调用
    servlet中如何访问spring容器
    Spring MVC与struts比较
    Spring security 命名空间的使用
    spring AOP面向切面编程
    关于String对象解析
    关于Spring切点函数@args()
    Spring中事务的传播属性详解
    Spring+Ibatis+事务处理

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用