File tree 2 files changed +11
-11
lines changed
2 files changed +11
-11
lines changed Original file line number Diff line number Diff line change 1
1
# testing - 运行并验证示例 #
2
2
3
- testing 包除了测试,还提供了运行并验证示例的功能。示例,一方面是文档的效果,是关于某个功能的使用例子;另一方面,可以被当做测试运行。
3
+ ` testing ` 包除了测试,还提供了运行并验证示例的功能。示例,一方面是文档的效果,是关于某个功能的使用例子;另一方面,可以被当做测试运行。
4
4
5
5
一个示例的例子如下:
6
6
@@ -20,11 +20,11 @@ want:
20
20
hello
21
21
```
22
22
23
- 一个示例函数以 Example 开头,如果示例函数包含以 "Output" 开头的行注释,在运行测试时,go 会将示例函数的输出和 "Output" 注释中的值做比较,就如上面的例子。
23
+ 一个示例函数以 Example 开头,如果示例函数包含以 "Output: " 开头的行注释,在运行测试时,go 会将示例函数的输出和 "Output: " 注释中的值做比较,就如上面的例子。
24
24
25
- 有时候,输出顺序可能不确定,比如循环输出 map 的值,那么可以使用 "Unordered output" 开头的注释。
25
+ 有时候,输出顺序可能不确定,比如循环输出 map 的值,那么可以使用 "Unordered output: " 开头的注释。
26
26
27
- 如果示例函数没有 "Output" 注释 ,该示例函数只会被编译而不会被运行。
27
+ 如果示例函数没有上述输出注释 ,该示例函数只会被编译而不会被运行。
28
28
29
29
## 命名约定
30
30
@@ -49,7 +49,7 @@ func ExampleT_M_suffix() { ... }
49
49
50
50
本节开头提到了示例的两个作用,它们分别是由 ` godoc ` 和 ` go test ` 这两个命令实现的。
51
51
52
- 在执行 ` go test ` 时,会运行示例。具体的实现原理,可以通过阅读 ` go test ` 命令源码和 testing 包中 ` example.go ` 文件了解。
52
+ 在执行 ` go test ` 时,会运行示例。具体的实现原理,可以通过阅读 ` go test ` 命令源码和 ` testing ` 包中 ` example.go ` 文件了解。
53
53
54
54
# 导航 #
55
55
Original file line number Diff line number Diff line change 2
2
3
3
## TestMain
4
4
5
- 在写测试时,有时需要在测试之前或之后进行额外的设置(setup)或拆卸(teardown);有时,测试还需要控制在主线程上运行的代码。为了支持这些需求,testing 提供了 TestMain 函数 :
5
+ 在写测试时,有时需要在测试之前或之后进行额外的设置(setup)或拆卸(teardown);有时,测试还需要控制在主线程上运行的代码。为了支持这些需求,` testing ` 包提供了 ` TestMain ` 函数 :
6
6
7
7
func TestMain(m *testing.M)
8
8
9
- 如果测试文件中包含该函数,那么生成的测试将调用 TestMain(m),而不是直接运行测试。TestMain 运行在主 goroutine 中 , 可以在调用 m.Run 前后做任何设置和拆卸。注意,在 TestMain 函数的最后,应该使用 m.Run 的返回值作为参数调用 os.Exit。
9
+ 如果测试文件中包含该函数,那么生成的测试将调用 ` TestMain(m) ` ,而不是直接运行测试。` TestMain ` 运行在主 goroutine 中 , 可以在调用 ` m.Run ` 前后做任何设置和拆卸。注意,在 ` TestMain ` 函数的最后,应该使用 ` m.Run ` 的返回值作为参数去调用 ` os.Exit ` 。
10
10
11
- 另外,在调用 TestMain 时 , flag.Parse 并没有被调用。所以,如果 TestMain 依赖于 command-line 标志 ( 包括 testing 包的标记 ), 则应该显示的调用 flag.Parse。注意,这里说的依赖,说的是如果 TestMain 函数内依赖 flag,则必须显示调用 flag.Parse,否则不需要,因为 m.Run 中调用 flag.Parse。
11
+ 另外,在调用 ` TestMain ` 时 , ` flag.Parse ` 并没有被调用。所以,如果 ` TestMain ` 依赖于 command-line 标志( 包括 ` testing ` 包的标志),则应该显式地调用 ` flag.Parse ` 。注意,这里的依赖是指,若 ` TestMain ` 函数内需要用到 command-line 标志,则必须显式地调用 ` flag.Parse ` ,否则不需要,因为 ` m.Run ` 中调用 ` flag.Parse ` 。
12
12
13
- 一个包含 TestMain 的例子如下:
13
+ 一个包含 ` TestMain ` 的例子如下:
14
14
15
15
``` go
16
16
package mytestmain
@@ -46,13 +46,13 @@ func TestDatabase(t *testing.T) {
46
46
}
47
47
```
48
48
49
- 对 ` Run ` 感兴趣的可以阅读源码,了解其原理。
49
+ 对 ` m. Run` 感兴趣的可以阅读源码,了解其原理。
50
50
51
51
## Test Coverage
52
52
53
53
测试覆盖率,这里讨论的是基于代码的测试覆盖率。
54
54
55
- Go 从 1.2 开始,引入了测试覆盖率的支持,使用的是 cover 相关的工具(` go test -cover ` 、` go tool cover ` )。虽然 ` testing ` 包提供了 cover 相关函数,不过它们是给 cover 的工具使用的。
55
+ Go 从 1.2 开始,引入了对测试覆盖率的支持,使用的是与 cover 相关的工具(` go test -cover ` 、` go tool cover ` )。虽然 ` testing ` 包提供了 cover 相关函数,不过它们是给 cover 的工具使用的。
56
56
57
57
关于测试覆盖率的更多信息,可以参考官方的博文:[ The cover story] ( https://blog.golang.org/cover )
58
58
You can’t perform that action at this time.
0 commit comments