在Groovy中使用Hamcrest匹配器和JMock

时间:2010-11-30 21:20:52

标签: java groovy jmock hamcrest

我是Groovy的新手(也是JMock的新手)并且在使用匹配器对被模拟方法的参数进行使用时遇到了一些麻烦。当我尝试做这样的事情时:

    Expectations e = new Expectations();
    e.allowing(mockObject).doSomething(Expectations.with(aNonNull(ImmutableCollection.class)))
    e.will(returnValue(someResponse))

在构建期望时会导致以下错误:

groovy.lang.MissingMethodException: No signature of method: static org.jmock.Expectations.with() is applicable for argument types: (org.hamcrest.core.IsNot) values: [not null]
Possible solutions: with(boolean), with(org.hamcrest.Matcher), with(byte), with(org.hamcrest.Matcher), with(char), with(org.hamcrest.Matcher)

aNonNull返回Matcher<T>(org.hamcrest.core.IsNot实现Matcher<T>)并且有一个Expectations.with方法接受Matcher所以我不确定为什么Groovy试图找到一个with的版本采用具体类而不是aNonNull指定的接口。我也尝试将aNonNull的返回值转换为Matcher和Matcher<T>,而不会对错误进行任何更改。我不确定是否有关于泛型的东西让Groovy感到困惑或者还有什么要检查。

1 个答案:

答案 0 :(得分:1)

根据JavaDoc,org.jmock.Expectations.with()是一个实例而不是静态方法。这就是你收到错误的原因。

顺便说一下,专为Groovy构建的测试/模拟框架将使您的生活变得更加轻松(即使在测试Java代码时)。例如,Spock(http://spockframework.org)中的期望与此类似:

mockObject.doSomething(_ as ImmutableCollection)&gt;&gt; someResponse

需要注意的另一个Groovy模拟框架是GMock(http://code.google.com/p/gmock/)。