欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

Gmock 0.5.0 发布

程序员文章站 2022-04-03 10:41:30
...
Gmock是一个基于Groovy语言的mock框架。与Java的各种mock框架相比,Gmock利用了Groovy语言的特性,提供了更精简、更可读的语法。而与Groovy的官方解决方案——MockFor类——相比,除了更精简和可读的语法之外,用Gmock mock出来的对象是可以在Java代码中使用的,所以你可以使用Java编写代码而使用Groovy和Gmock编写测试。

入门
首先,你的测试类需要继承org.gmock.GMockTestCase。然后,使用mock()方法创建mock对象,并且只需要直接在mock对象上调用方法即可设定预期行为:
def mockLoader = mock()
// 需要使用强类型时可以这样:
// Loader mockLoader = mock(Loader)
mockLoader.load("fruit").returns("apple")
最后,在play闭包中执行你的测试:
void testBasic(){
  // 创建mock对象和设定预期行为
  play {
    // 运行你的代码
  }
}


特性
  • 方法调用: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") })
  • 支持Hamcrest匹配器:mockLoader.put("test", is(not(lessThan(5))))
  • 如果你的测试类不能继承GMockTestCase,那么请使用GMockController类
更详细的介绍请查看Gmock的文档

例子
一个完整的例子:
import org.gmock.GMockTestCase

class LoaderTest extends GMockTestCase {
  void testLoader(){
    def mockLoader = mock()
    mockLoader.load('key').returns('value')
    play {
      assertEquals "value", mockLoader.load('key')
    }
  }
}


网址
官方网站:http://gmock.org/
源代码:http://code.google.com/p/gmock/