当我运行 `go test -fuzz=Fuzz` 时,没有足够的内存资源来处理此命令

问题描述 投票:0回答:1

当我根据文档中的示例在Go中进行模糊测试时,我得到了这个错误。

错误日志

$ 去测试 -fuzz=Fuzz 警告:测试二进制文件不是使用覆盖率检测构建的,因此模糊测试将在没有覆盖率指导的情况下运行,并且可能效率低下 --- 失败:FuzzReverse(0.01s) 映射临时文件 C:\Users\use\AppData\Local\Temp uzz-2637883721:没有足够的内存资源可用于处理此命令。 失败 退出状态1 失败示例/模糊 0.031s

我的代码

package main

import (
    "testing"
    "unicode/utf8"
)

func FuzzReverse(f *testing.F) {
    testcases := []string{"Hello, world", " ", "!12345"}
    for _, tc := range testcases {
        f.Add(tc) // Use f.Add to provide a seed corpus
    }
    f.Fuzz(func(t *testing.T, orig string) {
        rev := Reverse(orig)
        doubleRev := Reverse(rev)
        if orig != doubleRev {
            t.Errorf("Before: %q, after: %q", orig, doubleRev)
        }
        if utf8.ValidString(orig) && !utf8.ValidString(rev) {
            t.Errorf("Reverse produced invalid UTF-8 string %q", rev)
        }
    })
}

和测试日志

$ 去测试一下
经过 好的示例/模糊 0.027s

$ 去版本 go版本go1.23.0 windows/386

go testing
1个回答
0
投票

我怀疑/怀疑你的

Reverse(orig)
函数返回错误,但你忽略它。如果您的函数返回如下错误:

func Reverse(s string) (string, error) {
if !utf8.ValidString(s) {
    return s, errors.New("input is not valid UTF-8")
}
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
    r[i], r[j] = r[j], r[i]
}
return string(r), nil
}

那么你的测试应该如下所示:

func FuzzReverse(f *testing.F) {
testcases := []string{"Hello, world", " ", "!12345"}
for _, tc := range testcases {
    f.Add(tc) // Use f.Add to provide a seed corpus
}
f.Fuzz(func(t *testing.T, orig string) {
    rev := Reverse(orig)
    if err1 != nil {
        t.Skip()
    }
    doubleRev, err2 := Reverse(rev)
    if err2 != nil {
        t.Skip()
    }
    if orig != doubleRev {
        t.Errorf("Before: %q, after: %q", orig, doubleRev)
    }
    if utf8.ValidString(orig) && !utf8.ValidString(rev) {
        t.Errorf("Reverse produced invalid UTF-8 string %q", rev)
    }
})
}

还要确保主包的文件夹可写,如果问题仍然存在,您可能需要清理缓存:

Running 'go clean -fuzzcache' removes all cached fuzzing values. This may make fuzzing less effective, temporarily.

我建议逐步完成doc,避免跳转/跳过某些步骤或只是复制代码而不阅读说明和解释,因为这对于避免此类未知错误很有用。 LMK 更多详细信息和/或分享您的完整代码,包括您正在测试的函数本身(模糊目标)。

PS:您可能会发现以下命令很有用:

go help testflag
go help testflag

您可能还会发现此链接很有用!

© www.soinside.com 2019 - 2024. All rights reserved.