如何使用JMockit来模拟接受Closure参数的Groovy方法?

时间:2014-02-13 21:56:45

标签: groovy jmockit

我有以下代码:

def method() {
    try {
        dependency0.call({ arg -> })
    } catch {
        dependency1.call()
    }
}

以及以下测试:

@Test
void shouldDoSomething(
        @Mocked final Dependency0 dependency0Mock) {
    final dependency1Mock = getDependency1Mock()

    new Expectations() {{
        dependency0Mock.call((Closure) any)
        result = new Exception('expected')

    final sut = new Sut(dependency1Mock, dependency0Mock)

    sut.method()
}

测试运行时会发出以下异常:

mockit.internal.UnexpectedInvocation: Parameter "arg" of Dependency0#call(groovy.lang.Closure arg) expected null, got Sut$_method_closure1@cafebead

如何模拟一个接受Groovy Closure的方法?

更新:即使参数类型为Integer,也会抛出相同的异常。

1 个答案:

答案 0 :(得分:0)

不要使用JMockit。相反,使用http://johnpwood.net/2008/06/13/overriding-java-methods-in-groovy-for-unit-testing/中描述的地图强制。