the-way-to-go_ZH_CN
Search…
Introduction
前言
第一部分:学习 Go 语言
第1章:Go 语言的起源,发展与普及
第2章:安装与运行环境
第3章:编辑器、集成开发环境与其它工具
第二部分:语言的核心结构与技术
第4章:基本结构和基本数据类型
第5章:控制结构
第6章:函数(function)
第7章:数组与切片
第8章:Map
第9章:包(package)
第10章:结构(struct)与方法(method)
第11章:接口(interface)与反射(reflection)
第三部分:Go 高级编程
第12章:读写数据
第13章:错误处理与测试
错误处理
运行时异常和 panic
从 panic 中恢复(Recover)
自定义包中的错误处理和 panicking
一种用闭包处理错误的模式
启动外部命令和程序
Go 中的单元测试和基准测试
测试的具体例子
用(测试数据)表驱动测试
性能调试:分析并优化 Go 程序
第14章:协程(goroutine)与通道(channel)
第15章:网络、模版与网页应用
第四部分:实际应用
第16章:常见的陷阱与错误
第17章:模式
第18章:出于性能考虑的实用代码片段
第19章:构建一个完整的应用程序
第20章:Go 语言在 Google App Engine 的使用
第21章:实际部署案例
附录
A 代码引用
B 有趣的 Go 引用
C 代码示例列表
D 书中的包引用
E 书中的工具引用
F 常见问题解答
G 习题答案
H 参考文献
Powered By
GitBook
测试的具体例子
在练习 9.4 中你写了一个叫
main_oddeven.go
的程序用来测试前 100 个整数是否是偶数。这个函数属于 even 包。
下面是一种可能的方案:
示例 13.7
even_main.go
:
package
main
import
(
"fmt"
"even/even"
)
func
main
()
{
for
i
:=
0
;
i
<=
100
;
i
++
{
fmt
.
Printf
(
"Is the integer %d even? %v\n"
,
i
,
even
.
Even
(
i
))
}
}
上面使用了 even.go 中的 even 包:
示例 13.8
even/even.go
:
package
even
func
Even
(
i
int
)
bool
{
// Exported function
return
i
%
2
==
0
}
func
Odd
(
i
int
)
bool
{
// Exported function
return
i
%
2
!=
0
}
在 even 包的路径下,我们创建一个名为 oddeven_test.go 的测试程序:
示例 13.9
even/oddeven_test.go
:
package
even
import
"testing"
func
TestEven
(
t
*
testing
.
T
)
{
if
!
Even
(
10
)
{
t
.
Log
(
" 10 must be even!"
)
t
.
Fail
()
}
if
Even
(
7
)
{
t
.
Log
(
" 7 is not even!"
)
t
.
Fail
()
}
}
func
TestOdd
(
t
*
testing
.
T
)
{
if
!
Odd
(
11
)
{
t
.
Log
(
" 11 must be odd!"
)
t
.
Fail
()
}
if
Odd
(
10
)
{
t
.
Log
(
" 10 is not odd!"
)
t
.
Fail
()
}
}
由于测试需要具体的输入用例且不可能测试到所有的用例(非常像一个无穷的数),所以我们必须对要使用的测试用例思考再三。
至少应该包括:
正常的用例
反面的用例(错误的输入,如用负数或字母代替数字,没有输入等)
边界检查用例(如果参数的取值范围是 0 到 1000,检查 0 和 1000 的情况)
可以直接执行 go install 安装 even 或者创建一个 以下内容的 Makefile:
include
$(
GOROOT
)
/src/Make.inc
TARG
=
even
GOFILES
=
\
even.go
\
include
$(
GOROOT
)
/src/Make.pkg
然后执行 make(或 gomake)命令来构建归档文件 even.a
测试代码不能在 GOFILES 参数中引用,因为我们不希望生成的程序中有测试代码。如果包含了测试代码,go test 会给出错误提示!go test 会生成一个单独的包含测试代码的
_test
程序。
现在我们可以用命令:
go test
(或
make test
)来测试 even 包。
因为示例 13.5 中的测试函数不会调用 t.Log 和 t.Fail,所以会得到一个 PASS 的结果。在这个简单例子中一切都正常执行。
为了看到失败时的输出,把函数 TestEven 改为:
func
TestEven
(
t
*
testing
.
T
)
{
if
Even
(
10
)
{
t
.
Log
(
"Everything OK: 10 is even, just a test to see failed output!"
)
t
.
Fail
()
}
}
现在会调用 t.Log 和 t.Fail,得到的结果如下:
---
FAIL
:
even
.
TestEven
(
0.00
seconds
)
Everything OK
:
10
is even
,
just a test to see failed output
!
FAIL
练习 13.4:
string_reverse_test.go
为练习 7.11
string_reverse.go
写一个单元测试。
把 string_reverse 放到自己的包 strev 中,只包含一个可导出函数 reverse。
实现并测试它。
链接
目录
上一节:
Go 中的单元测试和基准测试
下一节:
用(测试数据)表驱动测试
Previous
Go 中的单元测试和基准测试
Next
用(测试数据)表驱动测试
Last modified
3yr ago
Copy link