2016-05-06 39 views
1

我已经看到了Spock测试,其中模拟连线&配置在given块(这对我来说最合适),以及只有这样才能获得该测试通过要求我在then块内连线/配置模拟,这对我来说简直是愚蠢的。后者的一个例子是that I asked some time agoSpock块模拟和在哪里接线

于是我问:是什么决定其中实际上线/配置一个模拟,无论是在giventhen我真的希望答案不只是“继续玩,直到它工作”,因为这对我的小机器人大脑来说太不确定。

+0

你可以改变这个问题的标题,所以它押韵更多? – Kritner

+0

这是故意的:-) – smeeb

回答

2

如果您打算在多个测试中使用它们并希望减少样板,则应该在setup/given区块或甚至在setup()方法中实例化Mocks和Stub。

在我看来,Mocks和Stubs行为应该定义在最有意义的范围内。 then通常是最有意义的,但定义您并不真正关心检查的一般行为可以放在setup/given区块或甚至setup()方法中。

+0

感谢@Jon Peterson(+1) - 我(恭敬地)不同意'then'最有意义,但这是我现在不感兴趣的主观论点! **然而**,正如上面提供的链接所表明的那样,''given''内部的接线/配置模拟根本不起作用*。而我的问题是**是什么驱使了这个?**意思是,在什么情况下将'给定'中的接线/配置模拟工作,以及何时必须在'then'中完成?再次感谢! – smeeb

+1

在另一个问题中,我相信如果你在'given'块中使用'fizz1.getProperty('name')'而不是'fizz1.name',那么它也可以工作。 –

+1

您对Spock的“反直觉”本质感到困惑的根源可能在于您对其他Java嘲讽框架的体验。 Spock正在做一些事情,在'when'块之前的'then'块中调用期望值。附上一个调试器,你会看到调用顺序。当我使用非Spock模拟(例如Camel MockEndpoints)时,我通常使用'expect'模块而不是'when' /'then',这样我就可以手动排序我期望的方式。 –