mock 대신 클로저를 사용하는 것과 관련하여 언급 한 페이지에서 언급했듯이 그 자체만으로도 조롱 인터페이스 및 해당 인터페이스에 단일 메서드가있는 경우에만 작동합니다. 따라서 테스트중인 클래스가 인터페이스를 사용하지 않거나 하나 이상의 메소드를 모의해야하는 경우 Expando 또는 Map 중 하나를 사용해야합니다. 나는 항상 일관성 있고 항상 맵을 사용하는 것을 선호합니다. 제가 다루는 코드는 단일 인터페이스 메소드로 조롱 된 객체를 거의 필요로하지 않으며 맵을 사용하는 것은 더 많은 키 스트로크를 요구하지 않습니다. 이 객체를 조롱하는지도 나는 Expando를 사용하여 사이에 상당한 차이가 있지만가 새로운는 Expando에있는 단지 때문에 당신이 리터럴지도를 선언 할 수없는 좋은 방법의지도를 선호
interface Foo {
def someMethod(s)
}
// Closure, this breaks if someOtherMethod() is added to Foo or if Foo is a class
def mockMethod = { arg -> ...}
def myTestObject = new ObjectUnderTest(mockMetod as Foo)
// Map
def mockMethod = { arg -> ...}
def myTestObject = new ObjectUnderTest([someMethod:mockMethod] as Foo)
확실하지 않음 .
테스트중인 시스템 (SUT)에는 종속성이 있습니다. 지도를 사용하여 의존성을 조롱 한 다음 "as"연산자를 사용하여 입력합니다. "Mock 대신 Closure를 사용하는 개발자 테스팅"기사에서 언급했듯이 "인터페이스의 메소드와 같은 이름으로 사용되는 키와 함께 클로저 맵"을 사용합니다.이 경우 "인터페이스"는 의존; groovy/java 클래스이고 groovy/java 인터페이스는 아닙니다. – finneycanhelp