对程序进行单元测试时,有时我们会遇到一些小麻烦,比如某些操作十分耗时,有些依赖的对象不易获取等等,这时我们就可以通过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实战基础篇 #### 搭建Grails环境及创建Grails Demo程序 **Groovy**是一种面向对象的编程语言,它运行于Java平台上,能够与Java代码无缝集成。而**Grails**则是一款基于Groovy的高性能...
4. **执行测试**:然后,在测试代码中使用 mock 对象,执行待测试的逻辑。 5. **验证行为**:最后,使用 `verify()` 方法检查 mock 对象的调用是否符合预期,如:`verify(mockObject).someMethod()`。 ### 相关...
### Groovy 入门编程知识点详解 #### 一、Groovy简介 Groovy是一种基于Java平台的敏捷、灵活且功能强大的脚本语言。它不仅完全兼容Java语言,而且提供了更为简洁、直观的语法来增强代码的可读性和开发效率。Groovy...
Groovy是一种动态、灵活的编程语言,它设计用于Java虚拟机(JVM)上运行,并且与Java代码无缝集成。Groovy的语法简洁且富有表达力,使得开发过程更为高效。在Java生态系统中,Groovy常被用于构建脚本、自动化任务、...
Groovy是一种基于JVM的动态编程语言,它不仅继承了Java的强大功能,还引入了动态类型、闭包、DSL等现代编程特性,使得编写自动化测试脚本变得更加简洁和高效。本文将详细介绍Groovy脚本在自动化测试中的应用,包括其...
Groovy Plugin Tools是为开发者提供的一组工具,旨在简化Groovy在开发环境中的使用和集成,如Eclipse IDE。Eclipse是一款著名的开源集成开发环境,支持多种编程语言,包括Groovy。 1. **Groovy插件**:Groovy插件为...
Groovy是一种基于Java平台的动态编程语言,它与Java语法高度兼容,但提供了更简洁、更灵活的写法,使得开发更加高效。这篇博客“Groovy安装以及简单使用”将引导我们了解如何安装Groovy,并展示其基本用法。 首先,...
《Show Your ToolBox——锋利的Groovy》 在IT领域,工具的选择和使用往往直接影响到工作效率和项目质量。本文将深入探讨Groovy这门强大的动态编程语言,它以其灵活性和与Java的紧密集成,成为了许多开发者的得力...
8. **Spock(测试框架)**:Spock是Groovy的一个测试框架,它的语法优雅,易于理解,适合进行行为驱动开发(BDD)的测试。 9. **Scripting in Java Applications**:Groovy可以嵌入到Java应用中作为脚本语言使用,...
此外,通过Spock Mock()方法可以实现对对象方法的模拟,从而简化测试过程,提高测试效率。 #### Groovy与DOM:深入底层原理 在《Groovy Under the Hood: Groovy and the Document Object Model – Part II》一文中...
在测试中,可以使用 Spring 的 ApplicationContext 来获取 helloWorldService bean,并调用其 sayHello 方法,以验证 Groovy 脚本的正确性。 Groovy 在 Spring 中的使用可以带来许多好处,例如可以动态修改业务逻辑...
总结来说,Java开发中使用Groovy可以提升开发效率,简化代码,增强灵活性。无论是作为嵌入式脚本快速实现功能,还是作为类库扩展Java项目,或者是在Grails或Spring Boot框架中使用,Groovy都能为Java开发者带来诸多...
Groovy内置了强大的单元测试支持,包括使用Mock对象来进行测试。Mock对象是在测试过程中模拟其他对象的行为的一种方式,这有助于隔离测试代码,确保测试结果的准确性。 - **Mock框架**:书中讨论了Groovy内置的Mock...
[Pragmatic Bookshelf] Groovy 2 编程 (英文版) [Pragmatic Bookshelf] Programming Groovy 2 Dynamic Productivity for the Java Developer (E-Book) ☆ 出版信息:☆ [作者信息] Venkat Subramaniam [出版机构...
单元测试是软件开发不可或缺的一部分,Groovy提供了强大的单元测试框架,这部分内容介绍了如何利用Groovy进行高效的单元测试。 #### Groovy在Windows上的应用 虽然Groovy主要运行在Java平台上,但它在Windows操作...
Groovy和Grails是两个密切相关的开源技术,主要用于构建现代、高效的Java平台应用程序。Groovy是一种动态、灵活的编程语言,它与Java高度兼容,但语法更为简洁,提供了更多的灵活性。而Grails则是一个基于Groovy的...
Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,提供了丰富的功能,而Groovy则是一种面向Java平台的动态编程语言,它的设计目标是提高开发者的生产力。 Groovy语言: Groovy是Java平台上的一个...