Частные методы, которые не высмеивают в Grails 2.5.1

Недавно мы обновили 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  
}

И в моем тесте спока:

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 ответ

Когда у меня возникают проблемы с макетами с использованием метакласса, я использую это и обычно решаю проблему:

private MetaClassRegistryCleaner registryCleaner = MetaClassRegistryCleaner.createAndRegister()

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

void cleanup() {
    registryCleaner.clean()
    GroovySystem.metaClassRegistry.removeMetaClassRegistryChangeEventListener(registryCleaner)
}
Другие вопросы по тегам