go语言入门pdf go语言入门到精通( 二 )


在您的文本编辑器中 , 将 reverse_test.go 中的单元测试替换为以下模糊测试 。
Fuzzing 也有一些限制 。在您的单元测试中,您可以预测Reverse函数的预期输出,并验证实际输出是否满足这些预期 。
例如,在测试用例Reverse("Hello, world")中,单元测试将返回指定为"dlrow ,olleH".
模糊测试时,您无法预测预期输出,因为您无法控制输入 。
但是,Reverse您可以在模糊测试中验证函数的一些属性 。在这个模糊测试中检查的两个属性是:
(1)将字符串反转两次保留原始值
(2)反转的字符串将其状态保留为有效的 UTF-8 。
注意单元测试和模糊测试之间的语法差异:
(3)确保新包unicode/utf8已导入 。
随着单元测试转换为模糊测试,是时候再次运行测试了 。
a.在不进行模糊测试的情况下运行模糊测试 , 以确保种子输入通过 。
如果您在该文件中有其他测试 , 您也可以运行go test -run=FuzzReverse,并且您只想运行模糊测试 。
b.运行FuzzReverse模糊测试,查看是否有任何随机生成的字符串输入会导致失败 。这是使用go test新标志-fuzz执行的 。
模糊测试时发生故障 , 导致问题的输入被写入将在下次运行的种子语料库文件中go test , 即使没有-fuzz标志也是如此 。要查看导致失败的输入,请在文本编辑器中打开写入 testdata/fuzz/FuzzReverse 目录的语料库文件 。您的种子语料库文件可能包含不同的字符串 , 但格式相同 。
语料库文件的第一行表示编码版本 。以下每一行代表构成语料库条目的每种类型的值 。由于 fuzz target 只需要 1 个输入 , 因此版本之后只有 1 个值 。
c.运行没有-fuzz标志的go test; 新的失败种子语料库条目将被使用:
由于我们的测试失败,是时候调试了 。
GO语言(十八):模糊测试入门(下)-Reverse为了解决这个问题go语言入门pdf , 如果输入不是有效的 UTF-8  , 让go语言入门pdf我们返回一个错误 。
a.在您的文本编辑器中,将现有Reverse函数替换为以下内容 。
如果输入字符串包含无效的 UTF-8 字符,此更改将返回错误 。
b.由于 Reverse 函数现在返回错误,因此修改main函数以丢弃额外的错误值 。将现有main功能替换为以下内容 。
这些调用Reverse应该返回一个 nil 错误,因为输入字符串是有效的 UTF-8 。
c.您将需要导入错误和 unicode/utf8 包 。main.go 中的 import 语句应如下所示 。
d.修改reverse_test.go文件检查是否有错误 , 如果返回产生错误则跳过测试 。
除了返回之外 , 您还可以调用t.Skip()以停止执行该模糊输入 。
a.使用 go test 运行测试
b.使用go test -fuzz=Fuzz进行模糊测试,几秒钟后 , 停止用ctrl-C模糊测试 。
【go语言入门pdf go语言入门到精通】除非您通过-fuzztime标志进行限制,否则模糊测试将一直运行 , 直到遇到失败的输入 。如果没有发生故障 , 默认是永远运行,并且可以使用 中断该过程ctrl-C 。
c. 使用go test -fuzz=Fuzz -fuzztime 30s 。如果没有30 秒发现失败,它会在退出模糊测试 。
模糊测试通过了!
做得很好!您刚刚学习了在 Go 中进行模糊测试 。
— main.go —
— reverse_test.go —
《学习Go语言》pdf下载在线阅读全文,求百度网盘云资源《学习Go语言》百度网盘pdf最新全集下载:
链接:
?pwd=je9c 提取码: je9c
简介go语言入门pdf:Google工程师亲授go语言入门pdf,从学习语言语法特性到函数式编程、并发编程等等 。理论与实战结合go语言入门pdf , 帮助快速掌握Go语言 。通过研读标准库等经典代码设计模式,启发读者深刻理解Go语言go语言入门pdf的核心思维,进入Go语言开发的更高阶段 。

推荐阅读