2013-05-28 3 views
0

나는 두 개의 클래스가 폐쇄에 의해 선택적 매개 변수와 메소드를 대체 :Grails는

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

을 그리고 테스트에서 '해봐요'를 대체하고 싶지만 직장 dosent

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

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

내가 제거하는 경우 선택적 매개 변수, 그것은 작동합니다.

누군가이 문제를 해결하는 방법을 알고 있습니까? 정말 SENS가되지 않습니다 테스트를 알고 *

, 그냥 내 지점 내가 잘못합니까 무엇

을 보여이야? 'mockFor'를 사용하지 않고 그것을 할 수 있습니까? 기본 매개 변수를 설정

+0

를 사용하는 경우가 Groovy 2.0 GMock을 metaprogramming보다는 mocking을 사용하는 것을 권하고 싶습니다. 현재 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') doSomething ('toto') doSomething() doSomething() doSomething()) == 'Working2'' – Thermech

+0

고마워요 !!! – Thermech

+0

기꺼이 도와 드리겠습니다 :-) –