當(dāng)我編寫測試時,我喜歡使用隨機(jī)數(shù)來計算。例如 func init() { rand.Seed(time.Now().UnixNano()) } func TestXYZ(t *testing.T) { amount := rand.Intn(100) cnt := 1 + rand.Intn(10) for i := 0; i < cnt; i++ { doSmth(amount) } //more stuff }這當(dāng)然有一個缺點expected := calcExpected(amount, cnt)因為測試的預(yù)期值需要根據(jù)隨機(jī)值計算。如果這種方法受到批評:它使測試變得不必要的復(fù)雜由于隨機(jī)性,可重復(fù)性較差我認(rèn)為雖然沒有隨機(jī)性,我實際上可以:彌補(bǔ)我的結(jié)果,例如測試僅適用于特定值。隨機(jī)性證明我的測試是“穩(wěn)健的”捕獲更多邊緣情況(有爭議,因為邊緣情況通常是特定的,例如 0,1,-1)使用隨機(jī)數(shù)真的那么糟糕嗎?(我意識到這是一個意見問題,但我對人們的觀點非常感興趣,不介意投反對票)。
1 回答
精慕HU
TA貢獻(xiàn)1845條經(jīng)驗 獲得超8個贊
您的問題不是特定于 Go 的。這適用于任何語言和任何類型的單元測試。
測試的預(yù)期值需要根據(jù)隨機(jī)值計算。
這是主要問題。如果您的應(yīng)用程序邏輯稍微復(fù)雜,那么當(dāng)應(yīng)用程序中的邏輯發(fā)生變化時,您也必須在測試中更改相同的邏輯。您必須實施這些更改兩次。
想必每一個都同樣復(fù)雜,并且每一個的實現(xiàn)都有些不同,因為如果您只是在測試中復(fù)制粘貼或重用應(yīng)用程序中的代碼來計算預(yù)期值,那么他們就會同意并且測試毫無意義。
在單元測試中使用固定值進(jìn)行測試可以使測試變得簡單并練習(xí)代碼。
使用隨機(jī)值進(jìn)行測試,稱為模糊測試。我不是測試模糊方面的專家。使用隨機(jī)值進(jìn)行測試是模糊測試的一方面,但細(xì)微差別在于測試隨機(jī)值,這些隨機(jī)值可能會發(fā)現(xiàn)邊緣情況、捕獲錯誤、執(zhí)行未使用的代碼分支或發(fā)現(xiàn)泄漏。
- 1 回答
- 0 關(guān)注
- 201 瀏覽
添加回答
舉報
0/150
提交
取消
