Fuzz-тесты объявляются как функции с префиксом Fuzz и параметром *testing.F:
func FuzzReverse(f *testing.F) {
// Seed-корпус: начальные примеры
f.Add("hello")
f.Add("мир")
f.Add("")
// Фаззер мутирует seed-данные
f.Fuzz(func(t *testing.T, s string) {
rev := Reverse(s)
doubleRev := Reverse(rev)
if s != doubleRev {
t.Errorf("двойной реверс не равен оригиналу: %q", s)
}
})
}
Запуск:
go test -fuzz=FuzzReverse - запуск фаззинга (бесконечно, пока не найдет ошибку или Ctrl+C)go test -fuzz=FuzzReverse -fuzztime=30s - ограничение по времениgo test ./... - без -fuzz fuzz-тесты выполняются только на seed-корпусеНайденные "крашащие" входы сохраняются в testdata/fuzz/FuzzReverse/ и автоматически воспроизводятся при обычном go test.