스팍

2017-12-06 15 views
0

나는 폐쇄로 호출을하는 방법,이 같은 테스트하기 위해 노력하고 클로저의 내부에 포착 인수 :스팍

def foo(Long param) { 
    AnObject.doSomething { 
     bar(param) 
    } 
} 

을 그리고 난 그 doSomething을 테스트 할 수는 폐쇄로 호출 내부에 예상 값이있는 bar이 호출됩니다.

내가 스파이를 생성하고

when: 
    service.foo(1L) 
then: 
    1 * AnObject.doSomething{_} 

그러나 수행하여 제대로 doSomething 호출을 테스트 할 수있어, 나는 폐쇄의 내용에 주장을 수행 할 수있는 방법을 찾을 수 없습니다.

클로저 안에있는 것을 주장하는 적절한 방법은 무엇입니까? bar은 1L로 호출됩니까?

답변

0

코드를 더 이상 보지 않고도 바 메서드를 제공하는 클래스를 감시해야한다고 생각합니다. 이것은 테스트가 closure를 제공하기 때문에 조금 고안되었지만 다음과 같이 생각합니다 :

import spock.lang.Specification 

class Bar { 
    void bar(def param) { 
     println param 
    } 
} 

class DoSomethingTestSpec extends Specification { 

    class AnObject { 

     void doSomething(Closure c) { 

      def param = 1L 

      c.call(param) 
     } 
    } 

    def "test AnObject doSomething calls the closure"() { 

     given: 
     def closure = { def p -> 
      Bar.bar(p) 
     } 

     and: 
     GroovySpy(Bar, global:true) 

     and: 
     AnObject anObject = new AnObject() 

     when: 
     anObject.doSomething(closure) 

     then: 
     1 * Bar.bar(_) >> { args -> 
      assert args[0] == 1L 
     } 
    } 
}