2009-01-29 74 views
1

我試圖寫一個模塊的單元測試,它會給我一個給定的標準的隨機數字列表。如何測試有時會失敗?

我正在寫的特定測試是對原始序列進行重新排列。我測試該

  • 的序列具有相同的長度
  • 的序列具有相同的值
  • 的序列是不以同樣的順序

這樣做的問題是,有時序列,順序相同。什麼是解決這個問題的最好方法?

我正在使用NUnit(但可以使用另一個測試框架,如果有幫助)。

回答

6

你是如何生成你的隨機數的?

我會首先控制隨機數發生器的種子,並將第三次測試重新定義爲「當我們使用不同的種子時,序列的順序不一樣」。

2

什麼是最好的方式來處理 與此?

直到需求穩定後,才真正沒有辦法「處理它」。要麼洗牌確保序列失序(在這種情況下,洗牌不是真正的「隨機」),或者它們的順序相同也是可以的。如果可以讓shuffle按照相同的順序返回某些內容,那麼可以編寫一個測試來檢查大量運行結果與預期分發的分佈情況,但這與測試中的「random 「結果。如果洗牌不能返回相同的順序,那麼您可以多次運行該函數,以使您具有可接受的置信水平,即洗牌不會返回相同的順序,所以適用相同的一般原則。使用大量運行並根據允許的公差測量結果。

希望這有助於!

5
  • 我正在寫的特定測試是原始序列的重新洗牌。
  • 的序列是不相同的順序

這些要求不匹配。如果你真的是隨機洗牌,那麼顯然這個名單可以不變。

雖然有一個選項。當你創建你的隨機數發生器時,你可以傳入一個「種子」。如果你總是通過相同的種子,你應該總是得到相同的答案。現在你已經隨機取出了你的隨機函數,你可以輕鬆地進行單元測試。