单元测试 – 在单元测试Controller – MissingMethodException时无法模拟Grails服务方法

前端之家收集整理的这篇文章主要介绍了单元测试 – 在单元测试Controller – MissingMethodException时无法模拟Grails服务方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在测试控制器时收到以下错误消息 – 请参阅下面的代码.
我怎么能纠正这个?
当我从控制器(run-app)调用服务方法时,它工作正常.

例外:

groovy.lang.MissingMethodException: No signature of method:
grails.test.GrailsMock.isOk() is applicable for argument types:
(java.lang.String) values: [H] at …VControllerSpec.test
something(VControllerSpec.groovy:)

class:VControllerSpec

import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(VController)
@Mock(VService)
class VControllerSpec extends Specification {

    void "test something"() {
        given:
        def vServiceMock = mockFor(VService)
        vServiceMock.demand.isOk { String yeah -> return true }
        controller.vService = vServiceMock.createMock()

        when:
        def isO = vServiceMock.isOk("H") 

        then:
        isO == true     
    }
}

等级:VService

import grails.transaction.Transactional

@Transactional
class VService {
    def isOk = { String yeah ->     
        def isO = false
        return isO
    }
}

谢谢,
史蒂夫

解决方法

假设VController中有一个动作:

def myAction() {
    vService.isOk('Hello')
}

以下测试应该通过

void 'test service'() {
    given:
    def vServiceMock = mockFor(FormatService)
    vServiceMock.demand.isOk { String yeah -> return true }
    controller.vService = vServiceMock.createMock()

    when:
    def isO = controller.myAction() 

    then:
    isO == true
}

这里有一些优化的事情包括使用方法isOk而不是闭包作为最佳实践.

猜你在找的Groovy相关文章