2014-03-27 1 views
3

Spock 테스트에서 소프트웨어의 올바른 경로가 선택되었는지 확인하려고합니다. 그러나 우리는 innerMethod의 코드를 호출하고 메서드 호출의 호출되기 때문에이 테스트는 항상 실패Spock 테스트, 메서드가 호출되었는지 확인하고 실행하지 않습니다.

def "Test"() { 
    setup: 
    service.metaClass.innerMethod = { -> return null } 

    when: 
    service.doSomething("[email protected]") 

    then: 
    1 * service.innerMethod(*_) 
} 

(이 별도의 테스트에서 수행된다)라고하는 방법 중 기능을 테스트하고 싶지 않아 innerMethod에서 계산됩니다 및 방법 innerMethod

| Too few invocations for: 
    1 * service.innerMethod(*_) (0 invocations) 

Unmatched invocations (ordered by similarity): 

    1 * secondService.doSomething() 

의 호출은 어떻게 단지 innerMethod의 호출을받을 수 있으며, 멀리 완성 기능을 조롱하지? 당신은 서비스 자체를 조롱하지 않는 경우

답변

10

, 당신은 같은 것을 할 필요가있을 것이다 (메타 클래스 사용하는 경우 적절한 매개 변수를 전달 인식 :

def "Test"() { 
    setup: 
     def calls = 0 
     service.metaClass.innerMethod = { p1 -> calls++ } 
    when: 
     service.doSomething("[email protected]") 
    then: 
     calls==1 
} 

을 당신은 서비스를 조롱하는 경우,

def "Test"() { 
    when: 
     service.doSomething("[email protected]") 
    then: 
     1 * service.innerMethod(_) 
} 
+0

서비스 호출이 동일한 서비스 내에 있기 때문에 첫 번째 방법을 사용하므로 조롱을 당하지 않습니다. –

+1

좋은 소식입니다! –

+0

EXCELLENT 답변! –

관련 문제