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

Метод testing.F.Add

Метод testing.F.Add используется для добавления значений в корпус фаззинга. Он принимает один или несколько аргументов, которые должны соответствовать типам параметров целевой функции, передаваемой в f.Fuzz. Эти значения служат начальными данными для генерации новых тестовых случаев и помогают направлять процесс фаззинга в нужные области.

Синтаксис

func (f *testing.F) Add(args ...interface{})

Пример

Давайте рассмотрим базовый пример использования метода Add для добавления начальных данных в корпус фаззинга:

package main import ( "testing" ) func FuzzExample(f *testing.F) { // Добавляем начальные данные в корпус фаззинга f.Add(1, "hello") f.Add(2, "world") f.Add(3, "test") f.Fuzz(func(t *testing.T, num int, str string) { // Проверяем, что строка не пустая if str == "" { t.Errorf("empty string with num: %d", num) } }) }

В этом примере мы добавляем три набора значений, которые будут использоваться как начальные данные для фаззинга.

Пример

Покажем пример использования Add с различными типами данных:

package main import ( "testing" ) func FuzzTypes(f *testing.F) { // Добавляем значения разных типов f.Add(int64(100)) f.Add(uint(50)) f.Add(float64(3.14)) f.Add(true) f.Add([]byte("test data")) f.Fuzz(func(t *testing.T, data []byte) { // Проверяем, что данные не слишком большие if len(data) > 1024 { t.Errorf("data too large: %d bytes", len(data)) } }) }

Пример

Рассмотрим практический пример, где мы добавляем важные граничные значения для тестирования:

package main import ( "testing" ) func FuzzDivide(f *testing.F) { // Добавляем граничные значения f.Add(10, 2) f.Add(0, 5) f.Add(-5, 3) f.Add(1, 1) f.Add(100, 0) // Пограничный случай - деление на ноль f.Fuzz(func(t *testing.T, a, b int) { if b == 0 { return // Пропускаем деление на ноль } result := a / b // Проверяем, что результат не равен бесконечности if result < -1000 || result > 1000 { t.Errorf("result out of range: %d / %d = %d", a, b, result) } }) }

В этом примере мы специально добавляем случай с делением на ноль, чтобы фаззинг мог исследовать поведение функции в этой ситуации.

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

  • метод testing.F.Fuzz,
    который выполняет основную логику фаззинга
  • метод testing.F.Skip,
    который пропускает выполнение фазз-теста
  • структуру testing.T,
    которая используется для управления тестами
  • пакет testing/fuzz,
    содержащий документацию по фаззингу в Go
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить