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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)
})
}