Skip to content

Commit e62b812

Browse files
committed
fix & style: update 09.1.md
* fix some bugs and typos * optimize presentation and page structure * add a link to GoDoc and source code of testing/testing.go
1 parent 4da41ab commit e62b812

File tree

1 file changed

+53
-52
lines changed

1 file changed

+53
-52
lines changed

chapter09/09.1.md

+53-52
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44

55
func TestXxx(*testing.T)
66

7-
注意:Xxx 可以是任何字母数字字符串,但是第一个字母不能是小些字母
7+
注意:Xxx 可以是任何字母数字字符串,但是第一个字母不能是小写字母
88

9-
在这些函数中,使用 Error, Fail 或相关方法来发出失败信号。
9+
在这些函数中,使用 `Error``Fail` 或相关方法来发出失败信号。
1010

11-
要编写一个新的测试套件,需要创建一个名称以 _test.go 结尾的文件,该文件包含 `TestXxx` 函数,如上所述。 将该文件放在与被测试的包相同的包中。该文件将被排除在正常的程序包之外,但在运行 go test命令时将被包含。 有关详细信息,请运行 go help test ” 和 “ go help testflag 了解。
11+
要编写一个新的测试套件,需要创建一个名称以 _test.go 结尾的文件,该文件包含 `TestXxx` 函数,如上所述。 将该文件放在与被测试文件相同的包中。该文件将被排除在正常的程序包之外,但在运行 `go test` 命令时将被包含。 有关详细信息,请运行 `go help test``go help testflag` 了解。
1212

13-
如果有需要,可以调用 `*T``*B` 的 Skip 方法,跳过该测试或基准测试:
13+
如果有需要,可以调用 `*T``*B``Skip` 方法,跳过该测试或基准测试:
1414

1515
```go
1616
func TestTimeConsuming(t *testing.T) {
@@ -105,13 +105,13 @@ func TestFib(t *testing.T) {
105105
}
106106
}
107107
```
108-
因为我们使用的是 `t.Errorf`其中某个 case 失败,并不会终止测试执行
108+
由于我们使用的是 `t.Errorf`即使其中某个 case 失败,也不会终止测试执行
109109

110110
## T 类型 ##
111111

112112
单元测试中,传递给测试函数的参数是 `*testing.T` 类型。它用于管理测试状态并支持格式化测试日志。测试日志会在执行测试的过程中不断累积,并在测试完成时转储至标准输出。
113113

114-
当一个测试的测试函数返回时,又或者当一个测试函数调用 `FailNow``Fatal``Fatalf``SkipNow``Skip` 或者 `Skipf` 中的任意一个时,该测试即宣告结束。跟 `Parallel` 方法一样,以上提到的这些方法只能在运行测试函数的 goroutine 中调用。
114+
当测试函数返回时,或者当测试函数调用 `FailNow``Fatal``Fatalf``SkipNow``Skip``Skipf` 中的任意一个时,则宣告该测试函数结束。跟 `Parallel` 方法一样,以上提到的这些方法只能在运行测试函数的 goroutine 中调用。
115115

116116
至于其他报告方法,比如 `Log` 以及 `Error` 的变种, 则可以在多个 goroutine 中同时进行调用。
117117

@@ -123,44 +123,44 @@ T 类型内嵌了 common 类型,common 提供这一系列方法,我们经常
123123

124124
1)当我们遇到一个断言错误的时候,标识这个测试失败,会使用到:
125125

126-
Fail: 测试失败,测试继续,也就是之后的代码依然会执行
127-
FailNow: 测试失败,测试中断
126+
Fail : 测试失败,测试继续,也就是之后的代码依然会执行
127+
FailNow : 测试失败,测试中断
128128

129129
`FailNow ` 方法实现的内部,是通过调用 `runtime.Goexit()` 来中断测试的。
130130

131131
2)当我们遇到一个断言错误,只希望跳过这个错误,但是不希望标识测试失败,会使用到:
132-
133-
SkipNow: 跳过测试,测试中断
132+
133+
SkipNow : 跳过测试,测试中断
134134

135135
`SkipNow` 方法实现的内部,是通过调用 `runtime.Goexit()` 来中断测试的。
136136

137137
3)当我们只希望打印信息,会用到 :
138-
139-
Log: 输出信息
140-
Logf: 输出格式化的信息
138+
139+
Log : 输出信息
140+
Logf : 输出格式化的信息
141141

142142
注意:默认情况下,单元测试成功时,它们打印的信息不会输出,可以通过加上 `-v` 选项,输出这些信息。但对于基准测试,它们总是会被输出。
143143

144144
4)当我们希望跳过这个测试,并且打印出信息,会用到:
145-
146-
Skip: 相当于 Log + SkipNow
147-
Skipf: 相当于 Logf + SkipNow
145+
146+
Skip : 相当于 Log + SkipNow
147+
Skipf : 相当于 Logf + SkipNow
148148

149149
5)当我们希望断言失败的时候,标识测试失败,并打印出必要的信息,但是测试继续,会用到:
150150

151-
Error: 相当于 Log + Fail
152-
Errorf: 相当于 Logf + Fail
151+
Error : 相当于 Log + Fail
152+
Errorf : 相当于 Logf + Fail
153153

154-
6)当我们希望断言失败的时候,标识测试失败,打印出必要的信息,但中断测试,会用到
154+
6)当我们希望断言失败的时候,标识测试失败,打印出必要的信息,但中断测试,会用到
155155

156-
Fatal: 相当于 Log + FailNow
157-
Fatalf: 相当于 Logf + FailNow
156+
Fatal : 相当于 Log + FailNow
157+
Fatalf : 相当于 Logf + FailNow
158158

159159
### Parallel 测试 ###
160160

161-
包中的 Parallel 方法用于表示当前测试只会与其他带有 Parallel 方法的测试并行进行测试。
161+
包中的 Parallel 方法表示当前测试只会与其他带有 Parallel 方法的测试并行进行测试。
162162

163-
下面的例子演示的 Parallel 的使用
163+
下面例子将演示 Parallel 的使用方法
164164

165165
```go
166166
var (
@@ -230,13 +230,13 @@ func TestReadFromMap(t *testing.T) {
230230

231231
如果代码能够进行并行测试,在写测试时,尽量加上 Parallel,这样可以测试出一些可能的问题。
232232

233-
关于 Parallel 的更多内容,会在 [子测试](chapter09/09.3.md) 中介绍。
233+
关于 Parallel 的更多内容,会在 [子测试](09.3.md) 中介绍。
234234

235235
当你写完一个函数,结构体,main 之后,你下一步需要的就是测试了。testing 包提供了很简单易用的测试包。
236236

237237
# 写一个基本的测试用例 #
238238

239-
测试文件的文件名需要以_test.go 为结尾,测试用例需要以 TestXxxx 的样式存在
239+
测试文件的文件名需要以_test.go 为结尾,测试用例需要以 TestXxxx 的形式存在
240240

241241
比如我要测试 utils 包的 sql.go 中的函数:
242242

@@ -270,13 +270,14 @@ func TestReadFromMap(t *testing.T) {
270270
}
271271
}
272272
```
273-
#testing 的测试用例形式 #
273+
# testing 的测试用例形式 #
274274

275275
测试用例有四种形式:
276-
TestXxxx(t *testing.T) // 基本测试用例
277-
BenchmarkXxxx(b *testing.B) // 压力测试的测试用例
278-
Example_Xxx() // 测试控制台输出的例子
279-
TestMain(m *testing.M) // 测试 Main 函数
276+
277+
TestXxxx(t *testing.T) // 基本测试用例
278+
BenchmarkXxxx(b *testing.B) // 压力测试的测试用例
279+
Example_Xxx() // 测试控制台输出的例子
280+
TestMain(m *testing.M) // 测试 Main 函数
280281

281282
给个 Example 的例子 :(Example 需要在最后用注释的方式确认控制台输出和预期是不是一致的)
282283
```go
@@ -287,10 +288,10 @@ func TestReadFromMap(t *testing.T) {
287288
// 31.1
288289
}
289290
```
290-
#testing 的变量 #
291+
# testing 的变量 #
291292

292293
gotest 的变量有这些:
293-
294+
294295
* test.short : 一个快速测试的标记,在测试用例中可以使用 testing.Short() 来绕开一些测试
295296
* test.outputdir : 输出目录
296297
* test.coverprofile : 测试覆盖率参数,指定输出文件
@@ -304,60 +305,60 @@ gotest 的变量有这些:
304305
* test.cpu : 指定 cpu 数量
305306
* test.parallel : 指定运行测试用例的并行数
306307

307-
#testing 包内的结构 #
308+
# testing 的结构体 #
308309

309310
* B : 压力测试
310311
* BenchmarkResult : 压力测试结果
311312
* Cover : 代码覆盖率相关结构体
312313
* CoverBlock : 代码覆盖率相关结构体
313-
* InternalBenchmark : 内部使用的结构
314-
* InternalExample : 内部使用的结构
315-
* InternalTest : 内部使用的结构
316-
* M : main 测试使用的结构
317-
* PB : Parallel benchmarks 并行测试使用结果
314+
* InternalBenchmark : 内部使用的结构体
315+
* InternalExample : 内部使用的结构体
316+
* InternalTest : 内部使用的结构体
317+
* M : main 测试使用的结构体
318+
* PB : Parallel benchmarks 并行测试使用的结构体
318319
* T : 普通测试用例
319320
* TB : 测试用例的接口
320321

321-
#testing 的通用方法 #
322+
# testing 的通用方法 #
322323

323324
T 结构内部是继承自 common 结构,common 结构提供集中方法,是我们经常会用到的:
324325

325-
当我们遇到一个断言错误的时候,我们就会判断这个测试用例失败,就会使用到:
326+
1)当我们遇到一个断言错误的时候,我们就会判断这个测试用例失败,就会使用到:
326327

327-
Fail : case 失败,测试用例继续
328+
Fail : case 失败,测试用例继续
328329
FailedNow : case 失败,测试用例中断
329330

330-
当我们遇到一个断言错误,只希望跳过这个错误,但是不希望标示测试用例失败,会使用到:
331-
331+
2)当我们遇到一个断言错误,只希望跳过这个错误,但是不希望标示测试用例失败,会使用到:
332+
332333
SkipNow : case 跳过,测试用例不继续
333334

334-
当我们只希望在一个地方打印出信息,我们会用到 :
335-
335+
3)当我们只希望在一个地方打印出信息,我们会用到 :
336+
336337
Log : 输出信息
337338
Logf : 输出有 format 的信息
338339

339-
当我们希望跳过这个用例,并且打印出信息 :
340-
340+
4)当我们希望跳过这个用例,并且打印出信息 :
341+
341342
Skip : Log + SkipNow
342343
Skipf : Logf + SkipNow
343344

344-
当我们希望断言失败的时候,测试用例失败,打印出必要的信息,但是测试用例继续:
345+
5)当我们希望断言失败的时候,测试用例失败,打印出必要的信息,但是测试用例继续:
345346

346347
Error : Log + Fail
347348
Errorf : Logf + Fail
348349

349-
当我们希望断言失败的时候,测试用例失败,打印出必要的信息,测试用例中断:
350+
6)当我们希望断言失败的时候,测试用例失败,打印出必要的信息,测试用例中断:
350351

351352
Fatal : Log + FailNow
352353
Fatalf : Logf + FailNow
353354

354-
## 扩展阅读
355+
# 扩展阅读 #
355356

356357
[GO 中如何进行单元测试](http://blog.studygolang.com/2017/10/how-to-test-with-go/)
358+
[GoDoc - testing](https://godoc.org/testing)
359+
[testing/testing.go 源代码](https://golang.org/src/testing/testing.go)
357360

358361
# 导航 #
359362

360363
- [第九章](/chapter09/09.0.md)
361364
- 下一节:[testing - 基准测试](09.2.md)
362-
363-

0 commit comments

Comments
 (0)