我正在進行二十一點遊戲。我的遊戲對象包含一個甲板對象,在甲板達到一定的穿透水平後被洗牌。我的許多方法都依賴於這個deck對象。我沒有看到通過setter方法可以訪問deck對象的任何理由。我在測試Game類的方法時遇到了麻煩,因爲它們依賴於隨機的牌組順序。依賴於基本上隨機的實例變量的測試方法
例如,我有deal_hand方法。
def deal_hand(player)
reset_deck if @deck.size < 2
player.hands.push(Hand.new(*@deck.pop(2)))
end
我該如何測試這樣的方法?我想我可以手動創建一個在@deck實例變量中使用的Deck對象。不幸的是,我不能設置實例變量,而且我也不想添加setter,因爲除了測試之外沒有理由要「可設置」。我應該從我的測試文件中修補這個類並添加一個setter?另外 - 我主要寫腳本 - 我決定在這個項目失控後我需要開始編寫測試。是否有任何「測試模式」的規範資源?
編輯:
我使用MINITEST,支持存根/嘲諷。儘管據我所知,它只允許您爲模擬對象上的方法調用設置預期返回值。如果我製作了一個模擬套牌,實際的套牌對象也依賴於一個內部數組。調用卡組的代碼都不直接訪問數組。
如何在第一個地方的@deck設置? – 2013-03-24 07:51:08
你打開一個重構建議,可以使這個更容易測試?如果不是這樣的話:-) – 2013-03-24 08:05:38
是的,我會的。 @deck是一個Card對象的數組,已隨機隨機播放!當Game.new被調用時它被設置。 – 2013-03-24 08:07:17