我有两节课:
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 - grails用闭包替换可选参数的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16792778/