Gmock 0.5.0 发布

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/

你可能感兴趣的:(java,apple,框架,Google,groovy)