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

标签 grails groovy grails-2.2

我有两个类(class):

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' 是否可以做到这一点?

最佳答案

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

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

所以尝试设置 no-arg 函数(因为这是你要调用的函数:
Foo.metaClass.doSomething = { -> doSomething( 'Working' ) }

关于grails用闭包的可选参数替换方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16792778/

相关文章:

grails - Groovy-等待 promise list

grails - 从根获取不必要的静态资源

spring - 没有这样的属性 : org. codehaus.grails.INCLUDED_JS_LIBRARIES

mysql - 从 Grails 访问 MySQL 服务器

twitter-bootstrap - 在 grails 中集成 Bootstrap

multithreading - GORM实例对象线程安全

grails - 目前尚无人调用。仍然有1个调用预期错误

eclipse - 命令 "grails run-war"抛出错误 java.lang.NullPointerException

hibernate - 使用Hibernate将可变转换为不可变

groovy - 如何将 groovy 映射转换为 json