Gmock是一个基于Groovy语言的mock框架。与Java的各种mock框架相比,Gmock利用了Groovy语言的特性,提供了更精简、更可读的语法。而与Groovy的官方解决方案——MockFor类——相比,除了更精简和可读的语法之外,用Gmock mock出来的对象是可以在Java代码中使用的,所以你可以使用Java编写代码而使用Groovy和Gmock编写测试。
[size=large][b]入门[/b][/size]
首先,你的测试类需要继承org.gmock.GMockTestCase。然后,使用mock()方法创建mock对象,并且只需要直接在mock对象上调用方法即可设定预期行为:
[size=large][b]特性[/b][/size]
[list]
[*]方法调用:mockLoader.load("fruit").returns("apple")
[*]抛出异常:mockLoader.load("unknown").raises(new RuntimeException()) 或 mockLoader.load("unknown").raises(RuntimeException)
[*]stub:mockLoader.load("fruit").returns("apple").stub()
[*]静态方法:mockMath.static.random().returns(0.5)
[*]属性:mockLoader.name.returns("loader")
[*]构造函数:def mockFile = mock(File, constructor('/a/path/file.txt'))
[*]预期调用次数:mockLoader.load("fruit").returns("apple").atLeastOnce()
[*]自定义匹配器:mockLoader.load(match { it.startsWith("fru") })
[*]支持[url=http://code.google.com/p/hamcrest/]Hamcrest[/url]匹配器:mockLoader.put("test", is(not(lessThan(5))))
[*]如果你的测试类不能继承GMockTestCase,那么请使用GMockController类
[/list]更详细的介绍请查看Gmock的[url=http://gmock.org/documentation/0.5.0]文档[/url]。
[size=large][b]例子[/b][/size]
一个完整的例子:
[size=large][b]网址[/b][/size]
官方网站:[url]http://gmock.org/[/url]
源代码:[url]http://code.google.com/p/gmock/[/url]
[size=large][b]入门[/b][/size]
首先,你的测试类需要继承org.gmock.GMockTestCase。然后,使用mock()方法创建mock对象,并且只需要直接在mock对象上调用方法即可设定预期行为:
def mockLoader = mock()
// 需要使用强类型时可以这样:
// Loader mockLoader = mock(Loader)
mockLoader.load("fruit").returns("apple")
最后,在play闭包中执行你的测试:
void testBasic(){
// 创建mock对象和设定预期行为
play {
// 运行你的代码
}
}
[size=large][b]特性[/b][/size]
[list]
[*]方法调用:mockLoader.load("fruit").returns("apple")
[*]抛出异常:mockLoader.load("unknown").raises(new RuntimeException()) 或 mockLoader.load("unknown").raises(RuntimeException)
[*]stub:mockLoader.load("fruit").returns("apple").stub()
[*]静态方法:mockMath.static.random().returns(0.5)
[*]属性:mockLoader.name.returns("loader")
[*]构造函数:def mockFile = mock(File, constructor('/a/path/file.txt'))
[*]预期调用次数:mockLoader.load("fruit").returns("apple").atLeastOnce()
[*]自定义匹配器:mockLoader.load(match { it.startsWith("fru") })
[*]支持[url=http://code.google.com/p/hamcrest/]Hamcrest[/url]匹配器:mockLoader.put("test", is(not(lessThan(5))))
[*]如果你的测试类不能继承GMockTestCase,那么请使用GMockController类
[/list]更详细的介绍请查看Gmock的[url=http://gmock.org/documentation/0.5.0]文档[/url]。
[size=large][b]例子[/b][/size]
一个完整的例子:
import org.gmock.GMockTestCase
class LoaderTest extends GMockTestCase {
void testLoader(){
def mockLoader = mock()
mockLoader.load('key').returns('value')
play {
assertEquals "value", mockLoader.load('key')
}
}
}
[size=large][b]网址[/b][/size]
官方网站:[url]http://gmock.org/[/url]
源代码:[url]http://code.google.com/p/gmock/[/url]