Fuzz-тестирование (фаззинг) - метод автоматического тестирования, при котором инструмент генерирует случайные или мутированные входные данные и подает их в тестируемую функцию, отслеживая паники, ошибки и некорректное поведение.
В Go фаззинг встроен в стандартный testing пакет с версии 1.18:
func FuzzParseJSON(f *testing.F) {
// Seed-корпус - начальные примеры для мутаций
f.Add([]byte(`{"name":"test"}`))
f.Add([]byte(`[]`))
f.Fuzz(func(t *testing.T, data []byte) {
var result map[string]any
// Фаззер будет мутировать data
// и искать входы, вызывающие панику
_ = json.Unmarshal(data, &result)
})
}
Фаззинг особенно полезен для парсеров, валидаторов, сериализации/десериализации - всего, что принимает произвольный ввод.