我们最近从 Grails 2.4.4 升级到 2.5.1 以及 JDK 8。从那以后,下面的测试用例一直失败。
在我们的服务类中,我们定义了一个私有(private)方法来调用外部服务。
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
}
基本上在这里,私有(private)方法没有被 mock ,并且正在调用实际的服务,这导致我们的测试用例失败。有人有任何指针来模拟 Grails 2.5.1 中的私有(private)方法吗?
最佳答案
当我使用元类遇到模拟问题时,我会使用它并且通常会解决问题:
private MetaClassRegistryCleaner registryCleaner = MetaClassRegistryCleaner.createAndRegister()
void setup() {
GroovySystem.metaClassRegistry.addMetaClassRegistryChangeEventListener(registryCleaner)
}
void cleanup() {
registryCleaner.clean()
GroovySystem.metaClassRegistry.removeMetaClassRegistryChangeEventListener(registryCleaner)
}
关于grails - 私有(private)方法在 Grails 2.5.1 中没有被 mock ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783611/