This commit is contained in:
chai2010
2015-12-21 12:55:18 +08:00
parent 1d7534e3c3
commit 7ec2f7cdc1
152 changed files with 54426 additions and 8958 deletions

View File

@@ -1,11 +1,11 @@
### 11.2.1. 隨機測試
格驅動的測試便於構造基於精心挑選的測試數據的測試用例. 另一種測試思路是隨機測試, 也就是通過構造更廣的隨機輸入來測試探索函數的行爲.
格驅動的測試便於構造基於精心挑選的測試數據的測試用例. 另一種測試思路是隨機測試, 也就是通過構造更廣的隨機輸入來測試探索函數的行爲.
對於一隨機的輸入, 我們如何能知道希望的輸齣結果呢? 這有兩種策略. 第一是編寫另一函數, 使用簡單和清晰的算法, 雖然效率較低但是行爲和要測試的函數一, 然後對相的隨機輸入檢査兩者的輸齣結果. 第二種是生成的隨機輸入的數據遵循特定的模式, 這樣我們就可以知道期望的輸齣的模式.
對於一隨機的輸入, 我們如何能知道希望的輸齣結果呢? 這有兩種策略. 第一是編寫另一函數, 使用簡單和清晰的算法, 雖然效率較低但是行爲和要測試的函數一, 然後對相的隨機輸入檢査兩者的輸齣結果. 第二種是生成的隨機輸入的數據遵循特定的模式, 這樣我們就可以知道期望的輸齣的模式.
的例子使用的是第二種方法: randomPalindrome 函數用於隨機生成迴文字符串.
的例子使用的是第二種方法: randomPalindrome 函數用於隨機生成迴文字符串.
```Go
import "math/rand"
@@ -39,9 +39,9 @@ func TestRandomPalindromes(t *testing.T) {
}
```
雖然隨機測試有不確定因素, 但是它也是至關重要的, 我們可以從失敗測試的日誌穫取足夠的信息. 在我們的例子中, 輸入 IsPalindrome 的 p 參數將告訴我們眞實的數據, 但是對於函數將接受更雜的輸入, 不需要保存所有的輸入, 隻要日誌中簡單地記隨機數種子卽可(像上的方式). 有了這些隨機數初始化種子, 我們可以很容易脩改測試代碼以重現失敗的隨機測試.
雖然隨機測試有不確定因素, 但是它也是至關重要的, 我們可以從失敗測試的日誌穫取足夠的信息. 在我們的例子中, 輸入 IsPalindrome 的 p 參數將告訴我們眞實的數據, 但是對於函數將接受更雜的輸入, 不需要保存所有的輸入, 隻要日誌中簡單地記隨機數種子卽可(像上的方式). 有了這些隨機數初始化種子, 我們可以很容易脩改測試代碼以重現失敗的隨機測試.
通過使用前時間作爲隨機種子, 在整過程中的每次運行測試命令時都將探索新的隨機數據. 如果你使用的是定期運行的自動化測試集成繫統, 隨機測試將特有價值.
通過使用前時間作爲隨機種子, 在整過程中的每次運行測試命令時都將探索新的隨機數據. 如果你使用的是定期運行的自動化測試集成繫統, 隨機測試將特有價值.
**練習 11.3:** TestRandomPalindromes 隻測試了迴文字符串. 編寫新的隨機測試生成器, 用於測試隨機生成的非迴文字符串.