我已經看到了Spock測試,其中模擬連線&配置在given
塊(這對我來說最合適),以及只有這樣才能獲得該測試通過要求我在then
塊內連線/配置模擬,這對我來說簡直是愚蠢的。後者的一個例子是that I asked some time ago。Spock塊模擬和在哪裏接線
於是我問:是什麼決定其中實際上線/配置一個模擬,無論是在given
或then
?我真的希望答案不只是「繼續玩,直到它工作」,因爲這對我的小機器人大腦來說太不確定。
我已經看到了Spock測試,其中模擬連線&配置在given
塊(這對我來說最合適),以及只有這樣才能獲得該測試通過要求我在then
塊內連線/配置模擬,這對我來說簡直是愚蠢的。後者的一個例子是that I asked some time ago。Spock塊模擬和在哪裏接線
於是我問:是什麼決定其中實際上線/配置一個模擬,無論是在given
或then
?我真的希望答案不只是「繼續玩,直到它工作」,因爲這對我的小機器人大腦來說太不確定。
如果您打算在多個測試中使用它們並希望減少樣板,則應該在setup
/given
區塊或甚至在setup()
方法中實例化Mocks和Stub。
在我看來,Mocks和Stubs行爲應該定義在最有意義的範圍內。 then
通常是最有意義的,但定義您並不真正關心檢查的一般行爲可以放在setup
/given
區塊或甚至setup()
方法中。
感謝@Jon Peterson(+1) - 我(恭敬地)不同意'then'最有意義,但這是我現在不感興趣的主觀論點! **然而**,正如上面提供的鏈接所表明的那樣,''given''內部的接線/配置模擬根本不起作用*。而我的問題是**是什麼驅使了這個?**意思是,在什麼情況下將'給定'中的接線/配置模擬工作,以及何時必須在'then'中完成?再次感謝! – smeeb
在另一個問題中,我相信如果你在'given'塊中使用'fizz1.getProperty('name')'而不是'fizz1.name',那麼它也可以工作。 –
您對Spock的「反直覺」本質感到困惑的根源可能在於您對其他Java嘲諷框架的體驗。 Spock正在做一些事情,在'when'塊之前的'then'塊中調用期望值。附上一個調試器,你會看到調用順序。當我使用非Spock模擬(例如Camel MockEndpoints)時,我通常使用'expect'模塊而不是'when' /'then',這樣我就可以手動排序我期望的方式。 –
你可以改變這個問題的標題,所以它押韻更多? – Kritner
這是故意的:-) – smeeb