РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
976 of 1593 menu

Тип testing.F

Тип testing.F используется для написания fuzz-тестов в пакете testing. Он предоставляет методы для добавления начальных данных, выполнения fuzz-тестирования и контроля за процессом выполнения. Fuzz-тестирование позволяет автоматически генерировать случайные входные данные для поиска ошибок, паник и уязвимостей в коде.

Синтаксис

func FuzzFunction(f *testing.F) { f.Add(initialData...) f.Fuzz(func(t *testing.T, data ...interface{}) { // test logic }) }

Пример

Давайте напишем простой fuzz-тест для функции, которая преобразует строку в число:

package main import ( "strconv" "testing" ) func FuzzStringToInt(f *testing.F) { f.Add("123") f.Add("456") f.Fuzz(func(t *testing.T, s string) { result, err := strconv.Atoi(s) if err == nil { if result < 0 { t.Errorf("expected non-negative number, got %d", result) } } }) }

Результат выполнения кода при обнаружении ошибки:

"=== FAIL: FuzzStringToInt (0.00s)"

Пример

Рассмотрим пример с несколькими типами данных и проверкой на панику:

package main import ( "testing" ) func FuzzCheckData(f *testing.F) { f.Add(42, "hello", []byte{1, 2, 3}) f.Fuzz(func(t *testing.T, num int, s string, data []byte) { if num < 0 { t.Logf("negative number: %d", num) } if len(data) > 100 { t.Errorf("data too large: %d bytes", len(data)) } // Potential panic if s is empty if s != "" { _ = s[0] } }) }

Результат выполнения кода:

"=== PASS: FuzzCheckData (0.00s)"

Методы типа

Тип testing.F предоставляет следующие основные методы:

  • Add - добавляет начальные данные для fuzz-тестирования
  • Fuzz - запускает fuzz-тестирование с переданной функцией
  • Skip - пропускает выполнение теста с указанной причиной

Важные особенности

Fuzz-тесты выполняются в специальном режиме и могут генерировать миллионы входных данных для поиска ошибок. Тип testing.F автоматически сохраняет найденные значения, приводящие к ошибкам, для последующего воспроизведения. Это делает его мощным инструментом для обеспечения надежности кода.

Смотрите также

  • тип testing.T,
    который используется для написания обычных unit-тестов
  • тип testing.B,
    который используется для написания бенчмарков
  • тип testing.M,
    который используется для управления тестовым процессом
  • функцию testing.F.Add,
    которая добавляет начальные данные для fuzz-теста
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить