Частные методы, которые не высмеивают в 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)
}