2013-05-28 28 views
0

我有两个类:Grails的由封闭带有可选参数替代方法

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

而且我想在一个测试,以取代“DoSomething的”,但它dosent工作

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

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

如果我删除可选的参数,它的工作原理。

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

*我知道测试并没有真正桑斯,它只是表明我的观点

我该怎么办错了吗?是否有可能做到这一点,而不使用'mockFor'?

+0

如果您在使用Groovy <2.0我推荐使用GMock进行这种模拟而不是元编程。目前GMock不适用于Groovy> = 2.0 –

回答

1

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

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

所以尝试设置无参数的功能(因为这是你要拨打的那个号码:

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

如果完成了这个测试并且所有通过了 'Foo.metaClass.doSomething = { - > return 'Working1'}'()。doSomething('toto')。()。doSomething('toto')这个函数会返回一个新的Foo() )=='Working2'' – Thermech

+0

非常感谢! – Thermech

+0

很高兴帮助:-) –