Golang 模糊测试 简明教程

由于对分支条件和异常情况考虑的不周全,自测的单元测试能够正常通过。但是一旦b=0,程序将会崩溃。显然在上面的代码中,b不能等于0,否则会发生运行时错误。Golang1.18 引入了一个模糊测试的功能。文本萌叔将会简单介绍下这个特性。执行的过程中,会在当前目录下生成一个testdata目录。还可以使用-fuzztime来控制模糊测试最大执行时间。上图标红的位置,提示我们是哪条测试用例没有通过。执行Div(-6, 0)时,出现了panic。比如我们编写了一个工具包来做除法。我们可以编写一个模糊测试的用例。
摘要由CSDN通过智能技术生成

1.引言

Golang1.18 引入了一个模糊测试的功能。文本萌叔将会简单介绍下这个特性。

2.模糊测试

比如我们编写了一个工具包来做除法

package fuzz

func Div(a, b int) int {
    return a / b
}

由于疏忽忽略了某些边界条件。显然在上面的代码中,b不能等于0,否则会发生运行时错误。

普通的单元测试

func TestDiv(t *testing.T) {
    testcases := []struct {
        a, b, want int
    }{
        {10, 2, 5},
        {5, 3, 1},
        {-6, 3, -2},
        {-6, -3, 2},
    }
    for _, tc := range testcases {
        result := Div(tc.a, tc.b)
        if Div(tc.a, tc.b) != tc.want {
            t.Errorf("Div: %q, want %q", result, tc.want)
        }
    }
}

由于对分支条件和异常情况考虑的不周全,自测的单元测试能够正常通过。但是一旦b=0,程序将会崩溃。

模糊测试 fuzz test

我们可以编写一个模糊测试的用例

func FuzzXxx(f *testing.F) { ... }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值