`
wh870712
  • 浏览: 40344 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Groovy高效编程——使用Mock & Stub简化测试

阅读更多
对程序进行单元测试时,有时我们会遇到一些小麻烦,比如某些操作十分耗时,有些依赖的对象不易获取等等,这时我们就可以通过Groovy Mock或Groovy Stub来解决这些问题。Mock对方法调用的次数十分敏感,如果程序中调用的次数不在期望的调用次数范围内,则会抛出异常以致测试失败;而Stub仅仅是起到‘替身’的作用,它并不关心方法调用与否,即使方法一次都没被调用,也不会抛出异常导致测试失败。

下面让我们来看一个实际的例子吧:
import groovy.mock.interceptor.*

class User {
    String name
    String address
    String toString() {
        "Name: $name, Address: $address"
    }
}

class UserDao {
    User findUserByName(String name) {
        if ('山风小子' == name)
            return new User(name:name, address:'Shanghai')
        else
            return new User(name:'Anonymous User', address:'Unknown')
    }
}

class ShowUserInfoService {
    UserDao userDao = new UserDao()
    def showInfo(String name) {
        User user = userDao.findUserByName('山风小子')
        println user
    }
}



/*
    平时下面这些代码写于单元测试中,为了简洁起见,单独抽取出来
*/


def userDaoMock = new MockFor(UserDao)
/*
    UserDao对象中的findUserByName方法必须被调用1~2次,否则测试失败
    同时将findUserByName方法的实现替换为return new User(name:'mock user', address:'Unknown')
*/
userDaoMock.demand.findUserByName(1..2) { String name ->
    return new User(name:'mock user', address:'Unknown')
}

userDaoMock.use {
    def showUserInfoService = new ShowUserInfoService()
    showUserInfoService.showInfo('山风小子')
    showUserInfoService.showInfo('Daniel.Sun')
    //showUserInfoService.showInfo('BlueSUN')
}

def userDaoStub = new StubFor(UserDao)
/*
    仅仅将findUserByName方法的实现替换为return new User(name:'stub user', address:'Unknown')
    即使findUserByName方法不被调用,测试也不会失败
*/
userDaoStub.demand.findUserByName { String name ->
    return new User(name:'stub user', address:'Unknown')
}

userDaoStub.use {
    def showUserInfoService = new ShowUserInfoService()
    showUserInfoService.showInfo('山风小子')
}
运行结果:
Name: mock user, Address: Unknown
Name: mock user, Address: Unknown
Name: stub user, Address: Unknown
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Groovy轻松入门——Grails实战基础篇

    ### Groovy轻松入门——Grails实战基础篇 #### 搭建Grails环境及创建Grails Demo程序 **Groovy**是一种面向对象的编程语言,它运行于Java平台上,能够与Java代码无缝集成。而**Grails**则是一款基于Groovy的高性能...

    GMock——groovy下的mock工具

    4. **执行测试**:然后,在测试代码中使用 mock 对象,执行待测试的逻辑。 5. **验证行为**:最后,使用 `verify()` 方法检查 mock 对象的调用是否符合预期,如:`verify(mockObject).someMethod()`。 ### 相关...

    Groovy need not rails——介绍自己写的一个基于groovy的框架,Webx

    Groovy是一种动态、灵活的编程语言,它设计用于Java虚拟机(JVM)上运行,并且与Java代码无缝集成。Groovy的语法简洁且富有表达力,使得开发过程更为高效。在Java生态系统中,Groovy常被用于构建脚本、自动化任务、...

    Groovy脚本:Java平台自动化测试的灵活选择

    Groovy是一种基于JVM的动态编程语言,它不仅继承了Java的强大功能,还引入了动态类型、闭包、DSL等现代编程特性,使得编写自动化测试脚本变得更加简洁和高效。本文将详细介绍Groovy脚本在自动化测试中的应用,包括其...

    包含groovy plugin tools, eclemma 测试覆盖率4

    Groovy Plugin Tools是为开发者提供的一组工具,旨在简化Groovy在开发环境中的使用和集成,如Eclipse IDE。Eclipse是一款著名的开源集成开发环境,支持多种编程语言,包括Groovy。 1. **Groovy插件**:Groovy插件为...

    Groovy安装以及简单使用

    Groovy是一种基于Java平台的动态编程语言,它与Java语法高度兼容,但提供了更简洁、更灵活的写法,使得开发更加高效。这篇博客“Groovy安装以及简单使用”将引导我们了解如何安装Groovy,并展示其基本用法。 首先,...

    Show Your ToolBox——锋利的groovy

    《Show Your ToolBox——锋利的Groovy》 在IT领域,工具的选择和使用往往直接影响到工作效率和项目质量。本文将深入探讨Groovy这门强大的动态编程语言,它以其灵活性和与Java的紧密集成,成为了许多开发者的得力...

    java 动态脚本语言 精通 Groovy

    8. **Spock(测试框架)**:Spock是Groovy的一个测试框架,它的语法优雅,易于理解,适合进行行为驱动开发(BDD)的测试。 9. **Scripting in Java Applications**:Groovy可以嵌入到Java应用中作为脚本语言使用,...

    groovy 原版杂志 十月

    此外,通过Spock Mock()方法可以实现对对象方法的模拟,从而简化测试过程,提高测试效率。 #### Groovy与DOM:深入底层原理 在《Groovy Under the Hood: Groovy and the Document Object Model – Part II》一文中...

    Groovy在Spring中的简单使用

    在测试中,可以使用 Spring 的 ApplicationContext 来获取 helloWorldService bean,并调用其 sayHello 方法,以验证 Groovy 脚本的正确性。 Groovy 在 Spring 中的使用可以带来许多好处,例如可以动态修改业务逻辑...

    Java中使用Groovy的三种方式

    总结来说,Java开发中使用Groovy可以提升开发效率,简化代码,增强灵活性。无论是作为嵌入式脚本快速实现功能,还是作为类库扩展Java项目,或者是在Grails或Spring Boot框架中使用,Groovy都能为Java开发者带来诸多...

    Programming Groovy

    Groovy内置了强大的单元测试支持,包括使用Mock对象来进行测试。Mock对象是在测试过程中模拟其他对象的行为的一种方式,这有助于隔离测试代码,确保测试结果的准确性。 - **Mock框架**:书中讨论了Groovy内置的Mock...

    [Groovy] Groovy 2 编程 (英文版)

    [Pragmatic Bookshelf] Groovy 2 编程 (英文版) [Pragmatic Bookshelf] Programming Groovy 2 Dynamic Productivity for the Java Developer (E-Book) ☆ 出版信息:☆ [作者信息] Venkat Subramaniam [出版机构...

    groovy in action.pdf

    单元测试是软件开发不可或缺的一部分,Groovy提供了强大的单元测试框架,这部分内容介绍了如何利用Groovy进行高效的单元测试。 #### Groovy在Windows上的应用 虽然Groovy主要运行在Java平台上,但它在Windows操作...

    Groovy&Grails准备,收集的Groovy与Grails的书籍

    Groovy和Grails是两个密切相关的开源技术,主要用于构建现代、高效的Java平台应用程序。Groovy是一种动态、灵活的编程语言,它与Java高度兼容,但语法更为简洁,提供了更多的灵活性。而Grails则是一个基于Groovy的...

    Grails&Groovy学习资料

    Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,提供了丰富的功能,而Groovy则是一种面向Java平台的动态编程语言,它的设计目标是提高开发者的生产力。 Groovy语言: Groovy是Java平台上的一个...

Global site tag (gtag.js) - Google Analytics