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

Grails:我如何模拟测试中可能在测试期间内部调用的类的其他方法

发布时间:2020-12-14 16:37:41 所属栏目:大数据 来源:网络整理
导读:我正在一个类似于下面给出的服务类中对methodA()进行测试。 Class SampleService { def methodA(){ methodB() } def methodB(){ }} 当我测试methodA()时,我需要能够在测试methodA()时模拟对methodB()的调用。我使用2.0.x版的grails。在1.3.x发行版中,我会
我正在一个类似于下面给出的服务类中对methodA()进行测试。

Class SampleService {
  def methodA(){
     methodB()
  }

  def methodB(){
  }
}

当我测试methodA()时,我需要能够在测试methodA()时模拟对methodB()的调用。我使用2.0.x版的grails。在1.3.x发行版中,我会写一个这样的自我模仿

def sampleServiceMock = mockFor(SampleService) 
sampleServiceMock.demand.methodB { -> }

但是这在2.0.x版本中不起作用。我想知道在测试methodA()时,嘲笑methodB()的其他方法是什么?

解决方法

对于这种问题,我实际上避免了嘲笑,并使用内置的groovyProxy能力将一个闭包映射作为代理对象。这给你一个实例,一些方法被覆盖,但其他方法传递给真正的类:

class SampleService {
    def methodA() {
        methodB()
    }

    def methodB() {
        return "real method"
    }
}

def mock = [methodB: {-> return "mock!" }] as SampleService

assert "mock!" == mock.methodA()
assert "real method" == new SampleService().methodA()

我喜欢只改变一个实例,可以在一行中完成,并且不会弄乱那个实例之外的任何需要被清理的元类。

(编辑:李大同)

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

    推荐文章
      热点阅读