make loop

This commit is contained in:
chai2010
2015-12-18 14:49:31 +08:00
parent 9fde1ff772
commit f9ac065e47
106 changed files with 725 additions and 725 deletions

View File

@@ -5,9 +5,9 @@
黑盒和白盒這兩種測試方法是互補的. 黑盒測試一般更健壯, 隨着軟件實現的完善測試代碼很少需要更新. 它們可以幫助測試者了解眞是客戶的需求, 可以幫助發現API設計的一些不足之處. 相反, 白盒測試則可以對內部一些棘手的實現提供更多的測試覆蓋.
我們已經看到兩種測試的例子. TestIsPalindrome 測試僅僅使用導齣的 IsPalindrome 函數, 因此它是一個黑盒測試. TestEcho 測試則調用了內部的 echo 函數, 且更新了內部的 out 全變量, 這兩個都是未導齣的, 因此它是白盒測試.
我們已經看到兩種測試的例子. TestIsPalindrome 測試僅僅使用導齣的 IsPalindrome 函數, 因此它是一個黑盒測試. TestEcho 測試則調用了內部的 echo 函數, 且更新了內部的 out 全變量, 這兩個都是未導齣的, 因此它是白盒測試.
當我們開發TestEcho測試的時候, 我們脩改了 echo 函數使用包級的 out 作爲輸齣對象, 因此測試代碼可以用另一個實現代替標準輸齣, 這樣可以方便對比 echo 的輸齣數據. 使用類似的技術, 我們可以將品代碼的其他部分也替換爲一個容易測試的僞對象. 使用僞對象的好處是我們可以方便配置, 容易預測, 更可靠, 也更容易觀察. 同時也可以避免一些不良的副作用, 例如更新生數據庫或信用卡消費行爲.
當我們開發TestEcho測試的時候, 我們脩改了 echo 函數使用包級的 out 作爲輸齣對象, 因此測試代碼可以用另一個實現代替標準輸齣, 這樣可以方便對比 echo 的輸齣數據. 使用類似的技術, 我們可以將品代碼的其他部分也替換爲一個容易測試的僞對象. 使用僞對象的好處是我們可以方便配置, 容易預測, 更可靠, 也更容易觀察. 同時也可以避免一些不良的副作用, 例如更新生數據庫或信用卡消費行爲.
下面的代碼演示了爲用戶提供網絡存儲的web服務中的配額檢測邏輯. 當用戶使用了超過 90% 的存儲配額之後將發送提醒郵件.
@@ -50,7 +50,7 @@ func CheckQuota(username string) {
}
```
我們想測試這個代碼, 但是我們不希望發送眞實的郵件. 因此我們將郵件處理邏輯放到一個有的 notifyUser 函數.
我們想測試這個代碼, 但是我們不希望發送眞實的郵件. 因此我們將郵件處理邏輯放到一個有的 notifyUser 函數.
```Go
gopl.io/ch11/storage2
@@ -110,7 +110,7 @@ func TestCheckQuotaNotifiesUser(t *testing.T) {
}
```
有一個問題: 當測試函數返迴後, CheckQuota 將不能正常工作, 因爲 notifyUsers 依然使用的是測試函數的僞發送郵件函數. (當更新全對象的時候總會有這種風險.) 我們必鬚脩改測試代碼恢 notifyUsers 原先的狀態以便後續其他的測試沒有影響, 要確保所有的執行路徑後都能恢, 包括測試失敗或 panic 情形. 在這種情況下, 我們建議使用 defer 處理恢的代碼.
有一個問題: 當測試函數返迴後, CheckQuota 將不能正常工作, 因爲 notifyUsers 依然使用的是測試函數的僞發送郵件函數. (當更新全對象的時候總會有這種風險.) 我們必鬚脩改測試代碼恢 notifyUsers 原先的狀態以便後續其他的測試沒有影響, 要確保所有的執行路徑後都能恢, 包括測試失敗或 panic 情形. 在這種情況下, 我們建議使用 defer 處理恢的代碼.
```Go
func TestCheckQuotaNotifiesUser(t *testing.T) {
@@ -127,8 +127,8 @@ func TestCheckQuotaNotifiesUser(t *testing.T) {
}
```
這種處理模式可以用來暫時保存和恢所有的全變量, 包括命令行標誌參數, 調試選項, 和優化參數; 安裝和移除導緻生產代碼生一些調試信息的鉤子函數; 還有有些誘導生代碼進入某些重要狀態的改變, 比如 超時, 錯誤, 甚至是一些刻意製造的發行爲.
這種處理模式可以用來暫時保存和恢所有的全變量, 包括命令行標誌參數, 調試選項, 和優化參數; 安裝和移除導致生産代碼生一些調試信息的鉤子函數; 還有有些誘導生代碼進入某些重要狀態的改變, 比如 超時, 錯誤, 甚至是一些刻意製造的發行爲.
以這種方式使用全變量是安全的, 因爲 go test 不會同時發地執行多個測試.
以這種方式使用全變量是安全的, 因爲 go test 不會同時發地執行多個測試.