grails用闭包替换带有可选参数的方法

时间:2013-05-28 13:00:27

标签: grails groovy grails-2.2

我有两节课:

class Foo {
    String doSomething(String a = 'Not working') {
        return a
    }
}

我想在测试中替换'doSomething',但它确实有效

@Test
void testMethodIWannaTest() {
    Foo.metaClass.doSomething = {String a -> return 'Working'}

    assert new Foo().doSomething() == 'Working' //THIS TEST FAIL, return 'Not Working'
}

如果我删除了可选参数,它就可以工作。

有人知道如何解决这个问题吗?

*我知道测试并没有真正发挥作用,只是为了表明我的观点

我做错了什么?是否可以在不使用'mockFor'的情况下完成?

1 个答案:

答案 0 :(得分:1)

设置默认参数会生成两种方法:

String doSomething()         { doSomething( 'Not working' ) }
String doSomething(String a) { a }

所以尝试设置no-arg功能(因为那是你要调用的那个:

Foo.metaClass.doSomething = { -> doSomething( 'Working' ) }