You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
1.5 KiB

package goSyntax
import (
"fmt"
"os"
"testing"
)
// Add的单元测试
func TestAdd(t *testing.T) {
// 定义测试用例
type item struct {
a, b, s uint8
}
items := []item{
{1, 1, 2},
{10, 56, 66},
{100, 101, 201},
{123, 1, 124},
}
// 执行测试(若有错误,报告)
for _, v := range items {
s := Add(v.a, v.b)
if s != v.s {
t.Errorf("a: %d, b: %d, s: %d", v.a, v.b, s)
}
}
}
// Add 的模糊测试
func FuzzAdd(f *testing.F) {
// 一,添加测试用例种子(到语料库中)
// 要与测试函数Add保持一致值随意
f.Add(uint8(2), uint8(3))
// 额外:将生成的模糊测试用例,写入到文件中
file, _ := os.OpenFile("./fuzz_input.txt", os.O_CREATE|os.O_TRUNC, 0644)
defer file.Close()
// 二,执行测试,基于模糊数据完成测试
f.Fuzz(func(t *testing.T, a, b uint8) {
// 额外记录下ab的值
// 实现测试
s := Add(a, b)
fmt.Fprintf(file, "a:%d, b:%d, s:%d\n", a, b, s)
// 模糊测试,由于数据随机生成,因此结果也是随机的
// 必须要找到可以判定是否结果正确的方法。
if s-a != b {
// 模拟可能错误的检测逻辑
//if int(s)-int(a) != int(b) {
t.Errorf("a: %d, b: %d, s: %d", a, b, s)
}
})
}
func FuzzSeed(f *testing.F) {
// 添加string类型的种子
f.Add("mashibing")
file, _ := os.OpenFile("./fuzz_input.txt", os.O_CREATE|os.O_TRUNC, 0666)
defer file.Close()
f.Fuzz(func(t *testing.T, s string) {
fmt.Fprintf(file, "%s\n", s)
})
}