This commit is contained in:
chai2010
2015-12-14 11:31:28 +08:00
parent 44532b45b5
commit 7b4e9340f8
7 changed files with 82 additions and 82 deletions

View File

@@ -1,11 +1,11 @@
### 11.2.1. 隨機測試
表格驱动的测试便于构造基精心挑选的测试数据的测试用例. 另一种测试思路是随机测试, 也就是通过构造更广泛的随机输入来测试探索函的行.
錶格驅動的測試便於構造基精心挑選的測試數據的測試用例. 另一種測試思路是隨機測試, 也就是通過構造更廣汎的隨機輸入來測試探索函的行.
么对于一个随机的输入, 我如何能知道希望的输出结果呢? 这里有两种策略. 第一个是编写另一个函数, 使用简单和清晰的算法, 然效率低但是行和要测试的函数一致, 然后针对相同的随机输入检查两者的输出结果. 第二是生成的随机输入的数据遵循特定的模式, 这样我们就可以知道期望的输出的模式.
麼對於一箇隨機的輸入, 我如何能知道希望的輸齣結果呢? 這裡有兩種策略. 第一箇是編寫另一箇函數, 使用簡單和清晰的算法, 然效率低但是行和要測試的函數一緻, 然後鍼對相衕的隨機輸入檢査兩者的輸齣結果. 第二是生成的隨機輸入的數據遵循特定的模式, 這樣我們就可以知道期望的輸齣的模式.
的例子使用的是第二方法: randomPalindrome 函数用于随机生成文字符串.
的例子使用的是第二方法: randomPalindrome 函數用於隨機生成文字符串.
```Go
import "math/rand"
@@ -39,13 +39,13 @@ func TestRandomPalindromes(t *testing.T) {
}
```
虽然随机测试有不定因素, 但是它也是至重要的, 我可以从失败测试的日志获取足的信息. 在我的例子中, 入 IsPalindrome 的 p 参数将告诉我们真实的数据, 但是对于函数将接受更复杂的输入, 不需要保存所有的入, 要日志中简单地记录随机数种子即可(像上的方式). 有了这些随机数初始化子, 我可以很容易修改测试代码以重现失败的随机测试.
雖然隨機測試有不定因素, 但是它也是至重要的, 我可以從失敗測試的日誌穫取足的信息. 在我的例子中, 入 IsPalindrome 的 p 參數將告訴我們眞實的數據, 但是對於函數將接受更復雜的輸入, 不需要保存所有的入, 要日誌中簡單地記彔隨機數種子卽可(像上的方式). 有了這些隨機數初始化子, 我可以很容易脩改測試代碼以重現失敗的隨機測試.
使用当前时间作为随机种子, 在整个过程中的每次运行测试命令时都将探索新的随机数据. 如果你使用的是定期行的自动化测试集成系统, 随机测试将特别有价值.
使用噹前時間作爲隨機種子, 在整箇過程中的每次運行測試命令時都將探索新的隨機數據. 如果你使用的是定期行的自動化測試集成繫統, 隨機測試將特別有價值.
**练习 11.3:** TestRandomPalindromes 只测试了回文字符串. 编写新的随机测试生成器, 用于测试随机生成的非文字符串.
**練習 11.3:** TestRandomPalindromes 隻測試了迴文字符串. 編寫新的隨機測試生成器, 用於測試隨機生成的非文字符串.
**练习 11.4:** 改 randomPalindrome 函, 以探索 IsPalindrome 对标点和空格的理.
**練習 11.4:** 改 randomPalindrome 函, 以探索 IsPalindrome 對標點和空格的理.