作为我的另一个问题的附录: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只是简单地注册调用而不是认识到我想改变它的行为。有没有办法做到这一点,还是我必须一遍又一遍地重复所有的初始化逻辑?
答案 0 :(得分:0)
今天,在类之间共享模拟相关代码的唯一方法是通过基类。一旦Spock支持Groovy 2.3 mixins,mixins可能就是最佳选择。
如果您发现自己经常分享模拟,请考虑使用虚假对象。通常情况下,模拟对于手头的测试非常具体。