forked from unknwon/the-way-to-go_ZH_CN
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
dake
committed
Nov 8, 2015
1 parent
e33618d
commit 687d52a
Showing
3 changed files
with
63 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# 13.10 性能调试:分析并优化 Go 程序 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,60 @@ | ||
# 13.9 用(测试数据)表驱动测试 | ||
# 13.9 用(测试数据)表驱动测试 | ||
|
||
编写测试代码时,一个较好的办法是把测试的输入数据和期望的结果写在一起组成一个数据表:表中的每条记录都是一个含有输入和期望值的完整测试用例,有时还可以结合像测试名字这样的额外信息来让测试输出更多的信息。 | ||
|
||
实际测试时简单迭代表中的每条记录,并执行必要的测试。这在练习 13.4 中有具体的应用。 | ||
|
||
可以抽象为下面的代码段: | ||
|
||
```go | ||
var tests = []struct{ // Test table | ||
in string | ||
out string | ||
|
||
}{ | ||
{“in1”, “exp1”}, | ||
{“in2”, “exp2”}, | ||
{“in3”, “exp3”}, | ||
... | ||
} | ||
|
||
func TestFunction(t *testing.T) { | ||
for i, tt := range tests { | ||
s := FuncToBeTested(tt.in) | ||
if s != tt.out { | ||
t.Errorf(“%d. %q => %q, wanted: %q”, i, tt.in, s, tt.out) | ||
} | ||
} | ||
} | ||
|
||
``` | ||
|
||
如果大部分函数都可以写成这种形式,那么写一个帮助函数 verify 对实际测试会很有用: | ||
|
||
```go | ||
func verify(t *testing.T, testnum int, testcase, input, output, expected string) { | ||
if input != output { | ||
t.Errorf(“%d. %s with input = %s: output %s != %s”, testnum, testcase, input, output, expected) | ||
} | ||
} | ||
|
||
``` | ||
|
||
TestFunction 则变为: | ||
|
||
```go | ||
|
||
func TestFunction(t *testing.T) { | ||
for i, tt := range tests { | ||
s := FuncToBeTested(tt.in) | ||
verify(t, i, “FuncToBeTested: “, tt.in, s, tt.out) | ||
} | ||
} | ||
|
||
``` | ||
|
||
## 链接 | ||
|
||
- [目录](directory.md) | ||
- 上一节:[测试的具体例子](13.8.md) | ||
- 下一节:[性能调试:分析并优化 Go 程序](13.10.md) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters