加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

单元测试 – 在单元测试Controller – MissingMethodException时

发布时间:2020-12-14 16:22:19 所属栏目:大数据 来源:网络整理
导读:在测试控制器时收到以下错误消息 – 请参阅下面的代码. 我怎么能纠正这个? 当我从控制器(run-app)调用服务方法时,它工作正常. 例外: groovy.lang.MissingMethodException: No signature of method: grails.test.GrailsMock.isOk() is applicable for argum
在测试控制器时收到以下错误消息 – 请参阅下面的代码.
我怎么能纠正这个?
当我从控制器(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而不是闭包作为最佳实践.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读