缺點
首先,它使測試更加令人費解和稍硬調試,因爲你不能直接看到所有的值被送入(雖然總是有生成測試用例的選擇代碼或數據也是如此)。如果你正在做一些半複雜的邏輯來生成隨機測試數據,那麼這段代碼也有可能存在一個錯誤。測試代碼中的錯誤可能會很痛苦,特別是如果開發人員立即假定錯誤是生產代碼。其次,通常不可能對預期答案進行具體說明。如果你知道基於輸入的答案,那麼你有一個很好的機會,你只是在測試邏輯(考慮它 - 如果輸入是隨機的,你怎麼知道預期的輸出?)結果,你可能必須交易非常具體的斷言(值應該是x)以用於更一般的健全性檢查斷言(值應該在y和z之間)。第三,除非有廣泛的輸入和輸出,否則通常可以在複雜度較低的標準單元測試中使用精心選擇的值來覆蓋相同的範圍。例如。選擇數字-max,(-max + 1),-2,-1,0,1,2,max-1,max。 (或者對算法有意思的東西)。
上升空間
當使用正確的目標做得很好,這些測試可以提供非常有價值的補充測試合格。我已經看到了很多代碼,當被隨機生成的測試輸入敲打時,由於不可預見的邊緣情況而失敗。我有時會添加一個額外的集成測試通行證,以生成大量的測試用例。
額外技巧
如果您的隨機測試失敗,隔離「有趣的」價值,推動它變成一個獨立的單元測試,以確保您可以修正錯誤,它會永遠之前簽入迴歸一個。
您能否告訴我們會有什麼好處? – 2010-08-09 16:04:15
在這裏,我編輯了這個問題。 Tnx! – Adibe7 2010-08-09 17:44:31
請注意,如果您輸入一個隨機數發生器的輸入(並且只能在一個線程中訪問它),那麼輸出是可重複的,而不是隨機的。如果擔心的只是一代大數據集的產生,那麼仍然可以使用隨機數生成器,而不需要隨機測試... – Kendrick 2010-08-09 18:08:34