【问题标题】:How to change Spock Mock's behaviours outside of a specification?如何在规范之外更改 Spock Mock 的行为?
【发布时间】:2014-06-30 07:06:33
【问题描述】:

作为我另一个问题的补充:How to create Spock mocks outside of a specification class? - 是否可以在规范之外更改 Mocks 的行为?

在我们的项目中,我们的规范中有很多代码如下所示:

someService.findById(SomeMother.SOME_OBJECT.id) >> SomeMother.SOME_OBJECT
someService.findById(_) >> {throw new IllegalArgumentException("No such object")}

我宁愿有这样的代码

Helper.register(SomeMother.SOME_OBJECT).to(someService)

所以我不必到处复制模拟逻辑。但是,我似乎无法在规范之外更改 Mocks 的行为,因为 Mock 只是注册调用而不是认识到我想改变它的行为。有没有办法做到这一点,还是我必须一遍又一遍地重复我所有的初始化逻辑?

【问题讨论】:

    标签: unit-testing mocking spock


    【解决方案1】:

    今天,在类之间共享模拟相关代码的唯一方法是通过基类。一旦 Spock 支持 Groovy 2.3 的 mixin,mixin 很可能会成为可行的方法。

    如果您发现自己经常分享模拟,请考虑使用假对象。通常,模拟是针对手头的测试非常具体的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      相关资源
      最近更新 更多