Go语言核心36讲
郝林
《Go并发编程实战》作者,前轻松筹大数据负责人
立即订阅
24139 人已学习
课程目录
已完结 54 讲
0/4登录后,你可以任选4讲全文学习。
开篇词+学习路线 (3讲)
开篇词 | 跟着学,你也能成为Go语言高手
免费
预习篇 | 写给0基础入门的Go语言学习者
50 | 学习专栏的正确姿势
模块一:Go语言基础知识 (6讲)
01 | 工作区和GOPATH
02 | 命令源码文件
03 | 库源码文件
04 | 程序实体的那些事儿(上)
05 | 程序实体的那些事儿(中)
06 | 程序实体的那些事儿 (下)
模块二:Go语言进阶技术 (16讲)
07 | 数组和切片
08 | container包中的那些容器
09 | 字典的操作和约束
10 | 通道的基本操作
11 | 通道的高级玩法
12 | 使用函数的正确姿势
13 | 结构体及其方法的使用法门
14 | 接口类型的合理运用
15 | 关于指针的有限操作
16 | go语句及其执行规则(上)
17 | go语句及其执行规则(下)
18 | if语句、for语句和switch语句
19 | 错误处理(上)
20 | 错误处理 (下)
21 | panic函数、recover函数以及defer语句 (上)
22 | panic函数、recover函数以及defer语句(下)
模块三:Go语言实战与应用 (27讲)
23 | 测试的基本规则和流程 (上)
24 | 测试的基本规则和流程(下)
25 | 更多的测试手法
26 | sync.Mutex与sync.RWMutex
27 | 条件变量sync.Cond (上)
28 | 条件变量sync.Cond (下)
29 | 原子操作(上)
30 | 原子操作(下)
31 | sync.WaitGroup和sync.Once
32 | context.Context类型
33 | 临时对象池sync.Pool
34 | 并发安全字典sync.Map (上)
35 | 并发安全字典sync.Map (下)
36 | unicode与字符编码
37 | strings包与字符串操作
38 | bytes包与字节串操作(上)
39 | bytes包与字节串操作(下)
40 | io包中的接口和工具 (上)
41 | io包中的接口和工具 (下)
42 | bufio包中的数据类型 (上)
43 | bufio包中的数据类型(下)
44 | 使用os包中的API (上)
45 | 使用os包中的API (下)
46 | 访问网络服务
47 | 基于HTTP协议的网络服务
48 | 程序性能分析基础(上)
49 | 程序性能分析基础(下)
尾声与思考题答案 (2讲)
尾声 | 愿你披荆斩棘,所向无敌
新年彩蛋 | 完整版思考题答案
Go语言核心36讲
登录|注册

24 | 测试的基本规则和流程(下)

郝林 2018-10-05
你好,我是郝林。今天我分享的主题是测试的基本规则和流程的(下)篇。
Go 语言是一门很重视程序测试的编程语言,所以在上一篇中,我与你再三强调了程序测试的重要性,同时,也介绍了关于go test命令的基本规则和主要流程的内容。今天我们继续分享测试的基本规则和流程。本篇代码和指令较多,你可以点击文章查看原文。

知识扩展

问题 1:怎样解释功能测试的测试结果?

我们先来看下面的测试命令和结果:
$ go test puzzlers/article20/q2
ok puzzlers/article20/q2 0.008s
$符号开头表明此行展现的是我输入的命令。在这里,我输入了go test puzzlers/article20/q2,这表示我想对导入路径为puzzlers/article20/q2的代码包进行测试。代码下面一行就是此次测试的简要结果。
这个简要结果有三块内容。最左边的ok表示此次测试成功,也就是说没有发现测试结果不如预期的情况。
当然了,这里全由我们编写的测试代码决定,我们总是认定测试代码本身没有 Bug,并且忠诚地落实了我们的测试意图。在测试结果的中间,显示的是被测代码包的导入路径。
而在最右边,展现的是此次对该代码包的测试所耗费的时间,这里显示的0.008s,即 8 毫秒。不过,当我们紧接着第二次运行这个命令的时候,输出的测试结果会略有不同,如下所示:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Go语言核心36讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(11)

  • Louis
    老师讲的很棒! 终于补到这里了! 很多东西都是从编程语言本质的角度去解析。很棒!
    2018-11-23
    4
  • benying
    打卡,201900606
    2019-06-06
    1
  • willmeng
    请问,如何修改默认测试时间上限呢?

    作者回复: 我不太清楚你说的“默认测试时间”是指什么。

    如果是性能测试的话,可以在执行 go test 命令时追加 -benchtime 标记。这实际上是下一篇文章的思考题。

    另外,-timeout 标记可用于设定当次测试运行的总时长,一旦超过这个时长就panic。

    具体用法可以参考:https://golang.org/cmd/go/#hdr-Testing_flags 。

    2019-04-14
    1
  • 左氧佛沙星人
    我用编辑器运行的时候,报错:
    # command-line-arguments [command-line-arguments.test]
    ./demo52_test.go:10:19: undefined: hello
    ./demo52_test.go:20:18: undefined: hello
    ./demo52_test.go:38:11: undefined: introduce

    老师能帮忙解答一下吗?

    作者回复: 初学的时候最好用命令行运行。

    两种解决方案:

    1. 在当前代码包下运行 go test 命令。这样可以执行当前代码包下的所有功能测试函数。

    2. 在当前代码包下运行 go test demo52_test.go demo52.go 命令。这样只会执行 demo52_test.go 文件中的功能测试函数。

    2019-04-13
    2
    1
  • 象牙塔下的渣渣
    老师,能不能把每节课后面的思考题给出答案啊?另外,你这个专栏上的内容在您的那本《Go并发编程》上有嘛?

    作者回复: 这个专栏是完全重写的,几乎跟书上的东西没有重叠。答案的话我赶完稿子后面再补吧。现在补精力跟不上。

    2018-10-11
    1
  • 手指饼干
    请问这里的500000,是最后一次执行测试函数时,被测函数的执行次数?还是整个测试周期,被测函数的执行次数?

    作者回复: 文章里写了:

    当某次执行的时间大于或等于上限时,我们就说这是命令此次对该测试函数的最后一次执行。这时的b.N的值就会被包含在测试结果中,也就是上述测试结果中的500000。

    极客时间版权所有: https://time.geekbang.org/column/article/41189

    2019-10-08
  • FW _UI
    老师咨询个问题,1.本地go test的缓存能push到Git 的远程用来跑CI/CD吗
    2.本地无改动文件的跑了几遍都是显示时间的,没有那种显示cache的go test结果
    2019-03-07
  • FW _UI
    老师咨询个问题,本地go test的缓存能push到Git 的远程用来跑CI/CD吗

    作者回复: 不能,即使能也不应该这么做啊。

    2019-03-07
  • Caesar
    请问老师,假如我测试的时候要跳过某些包中的源码文件,该怎么写go test命令。网上搜了一圈也没找到。

    作者回复: 跳过测试函数的话,你可以看一下 -run 这个标记。如果要跳过某个包不指定那个包不就得了。

    2019-01-23
  • 虢国技匠
    打卡
    2019-01-22
  • A 凡
    之前一直就没有用心去了解测试命令中各个参数的含义,都是通过ide直接运行了,这里学到了
    2018-10-24
收起评论
11
返回
顶部