目前我正在爲自己開發一個小型項目,並將其作爲熟悉單元測試和維護適當文檔的機會。JUnit具有隨機性質的測試方法
我有一個Deck
類與代表一副撲克牌(這很簡單,說實話,我可以肯定它沒有單元測試,但像我說我習慣於使用單元測試),它有一個shuffle()
方法可以改變牌組中牌的順序。
的實現是很簡單的,肯定會工作:
public void shuffle()
{
Collections.shuffle(this.cards);
}
但是,我怎麼能實現此方法的單元測試。我的第一個想法是在打電話shuffle()
後檢查牌組的頂牌是否不同,但當然有可能相同。我的第二個想法是檢查卡片的整個訂單是否發生了變化,但是他們又可能是按照相同的順序。那麼,我怎麼能寫一個測試來確保這種方法在所有情況下都能正常工作?而且,總的來說,你如何將單元測試方法的結果依賴於某種隨機性?
乾杯,
皮特
從邏輯角度來看,如果訂單保持不變,您的卡片會被視爲洗牌嗎? – 2010-05-30 13:04:39
對於你的最後一個問題,請參閱http://stackoverflow.com/questions/122741/testing-for-random-value-thoughts-on-this-approach。我也認爲D. Knuth有一整章的內容。 – ewernli 2010-05-30 17:15:47
我認爲如果卡片保持相同的順序並且發生了一些重新排序,那麼將卡組視爲洗牌是合理的,儘管不太可能將一副真正的卡片洗回到它們的相同順序原來英寸 – Peter 2010-05-30 19:39:06