作爲一些測試的一部分,我期望臨時用一個將返回一組可預測的測試值的消息替換消息的內容。什麼是標準的Smalltalk-y方式來完成這類工作?是否有一些示例代碼供我查看?如何在Smalltalk中以編程方式替換消息主體?
一些澄清:
- 沒有,這不是一個簡單的單元測試。我正在測試一個龐大複雜的系統。
- 在運行時替換整個對象是不切實際的。除了替換方法之外,重要的累積狀態必須由測試來控制。
- 子類化和替換一種方法沒有概括。我正在測試幾十個類似的類和數千個對象。用微小的一個方法類填充類層次結構,每個測試用例類都會很糟糕 - 如果我更改了測試用例,就會更需要更新它們。
下面是我要找寫一些僞代碼:
replaceMessage: 'fibonacci'
onClass: 'funFunctions'
with: 'returnsPredictableNumbersWithoutCalculatingThem'.
self runTestSet1.
restoreMessage: 'fibonacci'
onClass: 'funFunctions'.
self runFollowUpSet1. "Depends on state set by Set1"
replaceMessage: 'fibonacci'
onClass: 'funFunctions'
with: 'returnsPredictableNumbersWithoutCalculatingThemPart2'.
self runFollowUpSet2. "Depends on state set by followupset1"
restoreMessage: 'fibonacci'
onClass: 'funFunctions'.
你能舉一個例子嗎? – mathk 2011-01-22 21:00:17
在運行時替換整個對象是*實用*和標準的smalltalk習慣用法。由一個委託幾乎所有的東西,它代理。 – 2011-01-26 13:58:12
@Stephan你能提供一個這個成語的例子嗎?將置換對象採取原來的繼承層次結構中的位置(這樣我就可以,例如,更換爲O(100000)活動對象的祖先),或將我必須找到,然後再更換,每個單獨的對象? – blueberryfields 2011-01-26 14:24:50