如何改变Spock Mock在规范之外的行为?

时间:2014-06-30 07:06:34

标签: unit-testing mocking spock

作为我的另一个问题的附录: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只是简单地注册调用而不是认识到我想改变它的行为。有没有办法做到这一点,还是我必须一遍又一遍地重复所有的初始化逻辑?

1 个答案:

答案 0 :(得分:0)

今天,在类之间共享模拟相关代码的唯一方法是通过基类。一旦Spock支持Groovy 2.3 mixins,mixins可能就是最佳选择。

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