私有方法没有在Grails 2.5.1中被嘲笑

时间:2015-09-25 13:43:41

标签: grails groovy spock grails-2.5

我们最近从Grails 2.4.4升级到2.5.1以及JDK 8.从那时起,以下测试用例一直在失败。

在我们的服务类中,我们定义了一个私有方法来调用外部服务。

def retrieveResults() {       
    def results = callSoapService('serviceName')  
}

private def callSoapService(def serviceName) {     
    // call the service and format the results  
}

在我的spock测试中:

def setup() {
     service.metaClass.callSoapService = { String method -> mockSoapService(method) }
}

def "test service"() { 
    when: 
    def results = service.retrieveResults()

    then: 
    some value == results.size()
}

private mockSoapService(String method) {
    //mock the output
}

基本上在这里,私有方法没有被模拟,并且正在调用实际服务,这导致我们的测试用例失败。有人在Grails 2.5.1中有任何模拟私有方法的指针吗?

1 个答案:

答案 0 :(得分:0)

当我使用元类的模拟有问题时,我使用它并通常解决问题:

private MetaClassRegistryCleaner registryCleaner = MetaClassRegistryCleaner.createAndRegister()

void setup() {
    GroovySystem.metaClassRegistry.addMetaClassRegistryChangeEventListener(registryCleaner)
}

void cleanup() {
    registryCleaner.clean()
    GroovySystem.metaClassRegistry.removeMetaClassRegistryChangeEventListener(registryCleaner)
}