首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Go 1.18中模糊零值?

如何在Go 1.18中模糊零值?
EN

Stack Overflow用户
提问于 2022-03-18 20:54:35
回答 1查看 307关注 0票数 -1

我试图使用Go 1.18 go test -fuzz命令来模糊零值,以便在尝试取消引用指向字符串的指针之前确保不会忘记安全检查。

以下是我的尝试:

代码语言:javascript
复制
// main.go
package main

import (
    "fmt"
)

func HandleString(s *string) {
    // most common programmer error is dereferencing nil pointers without safety checks
    fmt.Println(*s)
}

func main() {
    s := "Hello, world"
    HandleString(&s)
}
代码语言:javascript
复制
// main_test.go
package main

import "testing"

func FuzzHandleString(f *testing.F) {
    h := "hello world"
    for _, seed := range []*string{nil, new(string), &h} {
        f.Add(seed)
    }
    f.Fuzz(func(t *testing.T, in *string) {
        HandleString(in)
    })
}

不幸的是,我遇到一个错误,说go不支持指针,只支持字符串数据类型。

我通过这样写我的测试找到了一个解决办法:

代码语言:javascript
复制
package main

import "testing"

func FuzzHandleString(f *testing.F) {
    h := "hello world"
    for _, seed := range []string{"-1", "", h} {
        f.Add(seed)
    }
    f.Fuzz(func(t *testing.T, in string) {
        if in == "-1" {
            HandleString(nil)
        } else {
            HandleString(&in)
        }
    })
}

这是一个可怕的设计,使得种子数据数组不容易重用,并且需要每个模糊函数中的逻辑来欺骗我的方法获得一个零值。

肯定有更好的办法我没想过?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-03-18 21:07:28

您的代码很尴尬,因为这不是毛茸茸的用途。模糊化是将随机值抛到您的函数中,以测试您可能没有考虑过的边缘情况。

您所做的更像是边界测试。您有一个已知的棘手输入,如nil、空字符串或空数组。在他们自己的单元测试中测试他们。

最后,我会问为什么nilhandleString的有效输入。nil不是字符串。这应该是一个错误,除非有充分的理由,否则,您应该测试该错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71533100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档