回到简体

This commit is contained in:
chai2010
2016-02-15 11:06:34 +08:00
parent 9e878f9944
commit 2b37b23285
177 changed files with 2354 additions and 2354 deletions

View File

@@ -1,8 +1,8 @@
### 11.2.2. 測試一個命令
### 11.2.2. 测试一个命令
對於測試`go test`是一的有用的工具,但是稍加努力我也可以用它來測試可執行程序。如果一包的名字是 main麽在構建時會生成一個可執行程序,不main包可以作爲一個包被測試器代碼導入。
对于测试`go test`是一的有用的工具,但是稍加努力我也可以用它来测试可执行程序。如果一包的名字是 main么在构建时会生成一个可执行程序,不main包可以作为一个包被测试器代码导入。
讓我們爲2.3.2的echo程序編寫一個測試。我們先將程序拆分爲兩個函數echo函完成正的工作main函數用於處理命令行輸入參數和echo可能返迴的錯誤
让我们为2.3.2的echo程序编写一个测试。我们先将程序拆分为两个函数echo函完成正的工作main函数用于处理命令行输入参数和echo可能返回的错误
<u><i>gopl.io/ch11/echo</i></u>
```Go
@@ -41,7 +41,7 @@ func echo(newline bool, sep string, args []string) error {
}
```
測試中我可以用各種參數和標標誌調用echo函,然後檢測它的出是否正, 我們通過增加參數來減少echo函數對全局量的依。我們還增加了一全局名out的變量來替代直接使用os.Stdout這樣測試代碼可以根需要out脩改爲不同的象以便於檢査。下面就是echo_test.go文件中的測試代碼
测试中我可以用各种参数和标标志调用echo函,然后检测它的出是否正, 我们通过增加参数来减少echo函数对全局量的依。我们还增加了一全局名out的变量来替代直接使用os.Stdout这样测试代码可以根需要out修改为不同的象以便于检查。下面就是echo_test.go文件中的测试代码
```Go
package main
@@ -82,15 +82,15 @@ func TestEcho(t *testing.T) {
}
```
意的是測試代碼和産品代在同一包。然是main包也有對應的main入口函,但是在測試的時候main包是TestEcho測試函數導入的一普通包里面main函數併沒有被出,而是被忽略的。
意的是测试代码和产品代在同一包。然是main包也有对应的main入口函,但是在测试的时候main包是TestEcho测试函数导入的一普通包里面main函数并没有被出,而是被忽略的。
過將測試放到表格中,我很容易添加新的測試用例。我通增加下面的測試用例看看失的情是怎麽樣的:
过将测试放到表格中,我很容易添加新的测试用例。我通增加下面的测试用例看看失的情是怎么样的:
```Go
{true, ",", []string{"a", "b", "c"}, "a b c\n"}, // NOTE: wrong expectation!
```
`go test`出如下:
`go test`出如下:
```
$ go test gopl.io/ch11/echo
@@ -100,6 +100,6 @@ FAIL
FAIL gopl.io/ch11/echo 0.006s
```
錯誤信息描述了嚐試的操作使用Go類似語法),實際的結果和期望的果。通過這樣的錯誤信息,你可以在檢視代碼之前就很容易定位錯誤的原因。
错误信息描述了尝试的操作使用Go类似语法),实际的结果和期望的果。通过这样的错误信息,你可以在检视代码之前就很容易定位错误的原因。
意的是在測試代碼中併沒有調用log.Fatal或os.Exit爲調用這類函數會導致程序提前退出;調用這些函的特權應該放在main函中。如果的有意外的事情致函數發生panic常,測試驅動應該嚐試用recover捕獲異常,然後將當前測試當作失敗處理。如果是可期的錯誤,例如非法的用戶輸入、找不到文件或配置文件不當等應該通過返迴一個非空的error的方式理。幸的是(上面的意外是一個插麴),我的echo示例是比較簡單的也有需要返非空error的情
意的是在测试代码中并没有调用log.Fatal或os.Exit为调用这类函数会导致程序提前退出;调用这些函的特权应该放在main函中。如果的有意外的事情致函数发生panic常,测试驱动应该尝试用recover捕获异常,然后将当前测试当作失败处理。如果是可期的错误,例如非法的用户输入、找不到文件或配置文件不当等应该通过返回一个非空的error的方式理。幸的是(上面的意外是一个插曲),我的echo示例是比较简单的也有需要返非空error的情