2015-09-25 92 views
1

我们最近从Grails 2.4.4升级到2.5.1,并且升级到了JDK 8.从那之后,下面的测试案例一直失败。在Grails中没有被嘲笑的私有方法2.5.1

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

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中的私有方法?

+0

你在你的元方法有'String',但'def'在您服务...确实'服务.metaClass.callSoapService = {method - > mockSoapService(method)}'工作吗? –

+0

试过了,没有工作 – raVan

+0

我想挑战编写这个单元测试背后的原因。即使你达到你想要的,你也只是测试一个嘲弄的方法。该测试将始终通过,并且不会增加项目的价值。 retrieveResults()方法是否有更多的代码在这里没有显示? – kazanaki

回答

0

当我有使用元类嘲笑的问题,我用这个,通常解决的问题:

private MetaClassRegistryCleaner registryCleaner = MetaClassRegistryCleaner.createAndRegister() 

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

void cleanup() { 
    registryCleaner.clean() 
    GroovySystem.metaClassRegistry.removeMetaClassRegistryChangeEventListener(registryCleaner) 
} 
相关问题