当使用 Go 中引入的原生模糊测试功能时
1.18
,重构我的测试后,我现在遇到以下错误:
--- FAIL: FuzzTrie_InsertAndRead (0.03s)
trie_test.go:340: "testdata/fuzz/FuzzTrie_InsertAndRead/84ed65595ad05a58e293dbf423c1a816b697e2763a29d7c37aa476d6eef6fd60":
mismatched types in corpus entry: [[]uint8 []uint8], want [uint64 []uint8]
我认为这是由于我的测试参数从
byte
切片更改为 uint64
和 byte
切片,但是我如何摆脱这个语料库数据?它位于哪里?
使用 native Go fuzzing 运行测试时,会生成测试数据并将其存储在以下路径中,相对于正在运行的测试:
testdata/fuzz/<FuzzTestName>
。
如果模糊测试更改名称,则之前的测试数据实际上不会被使用,而如果其使用的类型发生更改,则其包含的语料库数据不再属于相关类型,可以通过完全删除文件夹来丢弃。
https://go.dev/doc/security/fuzz/#glossary说有2种身体类型:
生成的语料库:
位于
$GOCACHE/fuzz/<ProjectModuleName>/<PathToFileInProject>/<FuzzTestName>
,可以通过终端找到$GOCACHE
:go env GOCACHE
,并列出所有标记为新有趣的测试用例。
种子语料库: 这些是您在函数中生成的自己的种子以及
./testdata/fuzz/<FuzzTestName>/
中失败的测试