`

使用gmock对事务进行单元测试

阅读更多
这里的单元测试主要是需要mock掉数据库的方法, 如果是结合数据库回滚处理的集成测试不在讨论范围内.
在spring中我们使用事务通常有两种方式: 一种是采用aop的声明式事务, 一种是采用事务模板(TransactionTemplate), 对两种使用方式各有各的利弊, 这里不展开讨论, 我们通常采用第二种方式, 一般的写法也是比较template式的:
getTemplate(...).execute(new TransactionCallback() {
            public Object doInTransaction(final TransactionStatus status) {
                try {
		    ... // 使用事务的操作
                } catch (Exception e) {
                    status.setRollbackOnly();
                    return e;
                }
                return null;
            }
        }

这种方式在做单元测试的时候一般比较困难(主要是mock), 这里演示了一下使用GMock来如何做测试, 比java下的EasyMock相对来说要方便很多.
       // 录制mock对象的期望行为(主要是TransactionCallback内部类回调执行的动作)
        ...
        // 对事物模板行为的录制
        TransactionStatus  status = mock(TransactionStatus){setRollbackOnly()}
        // 使用闭包实现一个TransactionTemplate, 内部主要实现了一个回调, 这个用EasyMock实现比较困难        
        def template = [execute: {it.doInTransaction(status) }] as TransactionTemplate
        // service是测试对象, 内部注入了TemplateManager依赖
        def tm = service.TemplateManager = mock(TranscationManager)
        tm.getTemplate(id).returns(template)
        // 运行测试方法并验证
        play{
	   service.update(xxx)
	   ...
        }
分享到:
评论
3 楼 黑猪王子 2011-02-15  
macrochen 写道
黑猪王子 写道
如果不用Gmock呢?    如何实现对这样的事务代码进行单元测试?

如果不使用gmock还真不知道怎么搞


目前没有使用Gmock,目前采取的办法是把这个TransactionCallback的匿名内部类通过反射实例化一份出来,然后对其按照普通类来单独对其做单元测试.

对于外部类中使用到匿名内部类的回调结果的地方,都mock一个结果回去
我们这边的TransactionCallback太长,包含一堆的业务逻辑,所以不能放过,所以采用这样一个方法.
2 楼 macrochen 2011-02-14  
黑猪王子 写道
如果不用Gmock呢?    如何实现对这样的事务代码进行单元测试?

如果不使用gmock还真不知道怎么搞
1 楼 黑猪王子 2011-01-27  
如果不用Gmock呢?    如何实现对这样的事务代码进行单元测试?

相关推荐

    详解c++种gmock单元测试框架

    如果一个类中的函数没有被声明为虚函数(或纯虚函数),那么在单元测试中就无法使用gMock来模拟该函数的行为。 为了使用gMock,需要进行接口隔离设计。具体来说,应该采用纯虚函数(即接口)来定义类的行为,然后...

    Gmock和Gtest的使用

    本篇文章将深入探讨如何使用gmock和gtest进行单元测试。 Google Test (gtest) 是一个针对C++的单元测试库,它提供了丰富的断言来检查程序的行为是否符合预期。通过gtest,开发者可以创建自定义的测试用例,并在测试...

    单元测试工具——GMOCK概述

    在进行单元测试时,如果被测试的模块需要依赖其他尚未完成或无法直接使用的组件,则可以采用**Mock对象**来替代这些真实的依赖。简单来说,**Mock对象**是一种模拟对象,它能够模拟出真实对象的行为,以便在测试过程...

    C++开发测试工具gmock使用详解(进阶Demo).rar

    而gmock是Google提供的一款强大的C++测试框架,专门用于模拟对象,帮助开发者进行单元测试。 gmock全称为Google Mock,它是Google C++测试框架Google Test(gtest)的一部分,专注于模拟对象的创建和行为。通过...

    C++开发测试工具gmock1.8.1.rar

    在使用gmock进行单元测试时,首先需要创建一个模拟类,该类继承自被测试类的接口,并使用MOCK_METHOD宏声明模拟的方法。然后,可以在测试用例中设置期望和动作,通过EXPECT_CALL或WHEN_CALL来指定模拟对象的行为。...

    C++单元测试三大框架的比较

    C++单元测试三大框架的比较软件测试1、TUT结构框架简单。添加新的测试工作量小;无须注册测试;可移植性好(因其只需两个头文件,就可以完成测试工作);便于装卸;提供接口可以扩展其输出方式等。最大的优点:轻量级,...

    MVP架构开发中应用GooglTest进行单元测试的Demo

    在对P层进行单元测试时,使用gmock生成了model和view的mock类 目录结构如下: - |-code |-InterfaceDef.h |-PresenterImpl.h |-PresenterImpl.cpp |-unitTest |-MVPTestEnvironment.h |-Presenter_unittest....

    gmock-1.6.0.zip

    谷歌Mock(Google Mock,简称gmock)是C++编程领域中一个广泛使用的开源单元测试框架,它允许开发者创建虚拟函数的模拟对象,以便于测试复杂的代码逻辑。gmock-1.6.0.zip这个压缩包包含了该版本的gmock源代码,为...

    基于gmock实现的cppmockfree的使用方法总结

    要使用cppmockfree进行单元测试,首先需要安装和配置相应的依赖库。通常情况下,这涉及到以下步骤: 1. **安装gmock和gtest:** - gmock和gtest通常一起发布,可以从GitHub或官方文档获取最新版本。 - 安装过程中...

    gmock_1.7.0.rar

    这个版本兼容了当时的流行开发环境,例如VLC(VideoLAN Client)项目和Google相关项目,使得开发者在这些项目中可以更好地利用gmock进行单元测试。 gmock的核心理念是允许开发者创建模拟对象,这些对象可以模仿实际...

    C语言 单元测试 gtest教程 ctestcode Unitest

    总之,通过本教程的学习,你将掌握如何使用gtest对C语言项目进行单元测试,从而提升代码的可靠性和开发效率。无论是初学者还是经验丰富的开发者,理解和掌握单元测试都是提高编程技能的重要一步。

    iQuickTest培训课程 - 白盒测试框架(GMock C )

    iQuickTest培训课程 - 白盒测试框架(GMock C)课程的知识点涵盖了Google Mocking Framework(GMock)的使用和集成,这对于进行单元测试和白盒测试尤为重要。GMock是Google提供的一个用于C++的模拟框架,它通过模拟或...

    gmock-1.7.0.zip

    下面我们将深入探讨gmock的核心概念、功能以及如何使用它进行单元测试。 1. **gmock简介** gmock是Google Test(gtest)框架的一部分,主要处理模拟对象的创建和行为定义。通过模拟对象,开发者可以在测试中控制...

    gtest&gmock资料

    谷歌的gtest和gmock是C++开发者进行单元测试和模拟对象测试的重要工具。它们是开源的,被广泛用于确保代码质量、提高软件可维护性。本文将深入介绍这两个框架,并结合提供的“GoogleTest.chm”文件,探讨其核心概念...

    gmock相关资料和笔记

    gmock允许开发者创建行为模拟,使得测试可以独立于实际的依赖进行,从而提高测试的覆盖率和质量。下面我们将深入探讨gmock的核心概念、用法以及如何在实践中应用它。 1. **gmock基础** - gmock是Google Mock库的...

    GMock框架CookBook文档解析

    GMock是一个强大的C++测试框架,由Google开发,用于创建模拟对象,以便在单元测试中隔离复杂系统的行为。它基于Google Test(gtest)库,提供了一种灵活的方式来模拟类的方法,使得测试更加可控和可预测。本CookBook...

    gmock-1.6.0

    4. **文档**:`docs`目录下可能有gmock的用户指南和API参考文档,帮助开发者理解如何有效地使用gmock来编写单元测试。这些文档通常包括模拟对象的创建、期望设置、匹配器的使用、行为的定义等。 5. **构建脚本**:`...

    Google Mock For Dummies / GMock 傻瓜书

    使用 GMock 进行单元测试主要涉及三个步骤: 1. **创建 Mock 类**:首先需要定义一个 Mock 类,这个类继承自要被模拟的接口或基类,并且使用 `MOCK_METHOD` 宏来声明要被模拟的方法。 2. **设置 Mock 行为**:接着...

Global site tag (gtag.js) - Google Analytics