我的域名涉及隨機確定的選擇,我不確定如何進行單元測試。我應該如何測試隨機選擇?
作爲一個微不足道的例子,假設我想確保myobject.makeChoice()
返回的時間爲75%和false
。我怎麼能單元測試這個?
我可以斷言,
myobject.getChoiceAPercent()
是75,但 似乎微不足道,沒有什麼用處,並不能令人滿意,因爲它沒有測試的實際結果。我可以運行
myobject.makeChoice()
1000倍,並斷言的時候,它 回報true
70%至80%百分比,或一些統計方法 這樣的,但是卻似乎脆弱的,緩慢的, 不盡人意。我可以運行與預定的隨機發生器或 隨機種子一個單元測試和斷言
makeChoice()
運行5次返回[true, true, false, true, true]
,例如,但似乎在 相同斷言隨機(123)== 456也似乎不能令人滿意,因爲我不會測試實際的域名我很感興趣。
似乎隨機選擇可以證明與隨機生成的歸納推理本身而不是單元測試是正確的。那麼隨機生成的內容是不是適合自動化測試,還是有一種我不知道的簡單方法?
[編輯]爲了避免過度的糾紛「真正的隨機」與「僞隨機」等,讓我們假設下面的實現:
public boolean makeChoice() {
return this.random.nextDouble() < 0.75;
}
我如何單元測試makeChoice
回報true
的約75%時間?
我很困惑。如果它是隨機的,那麼就沒有辦法讓它保持在75%和25%的水平,而不會根據定義使它變得非隨機... – Andy 2012-01-06 01:38:36
我已經添加了一個澄清問題的實現。 – 2012-01-06 01:56:42
還有一個問題。你的代碼應該返回真正的75%的空間時間,我的意思是在1000次機會中它必須返回750個trues ..或100次機會它返回true .. – 2012-01-06 01:57:11