Skip to content

Концепции

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

Property   Закон о вашем коде, выраженный тест-методом под #[Property]: «для любого входа такой формы это утверждение верно». См. Быстрый старт.

Generator / arbitrary   Нечто, умеющее производить случайные значения заданной формы и минимизировать их. Gen::intBetween(0, 100) — генератор; возвращаемый им объект реализует ArbitraryInterface. См. Генераторы.

Run (прогон)   Одно выполнение тела property с одним набором сгенерированных аргументов. #[Property(runs: 200)] запрашивает 200 успешных прогонов — про то, что не считается, см. «discard» ниже.

Discard (отброс)   Прогон, отброшенный через Assume::that(false), потому что precondition не выполнилась. Отброшенные попытки не расходуют runs; они повторяются, пока не превышен maxDiscards.

Seed   Целое число, детерминированно управляющее random-фазой property. Два прогона с одним seed генерируют идентичную последовательность значений — именно это делает сообщённое падение воспроизводимым: #[Property(seed: 7382910)].

Falsify (фальсифицировать)   То, что происходит, когда сгенерированный (или явный) вход ломает утверждение property. Раннер перехватывает падение и передаёт вход shrinker'у.

Shrink / shrinking   Минимизация фальсифицирующего входа спуском по дереву меньших кандидатов значения в поисках простейшего, который всё ещё падает. См. Shrinking — как строится само дерево и почему гарантированно завершается.

Counterexample   Шринкнутый (минимальный) вход, фальсифицировавший property, плюс исходный вход, падение и статистика прогонов/shrink-шагов — несёт CounterExample, сообщается внутри PropertyViolationException.

Classify / coverage   Запись, каким «видом» входа оказался каждый прогон (even, empty, boundary, …), чтобы проверить, что генераторы реально достигают интересных кейсов, а не проходят впустую. См. Распределение.

Regression corpus (корпус регрессий)   Опциональная персистентная память (PROPERTY_DB) прошлых падений, реплеящаяся перед random-фазой на каждом прогоне, чтобы исправленный баг не мог незаметно вернуться. См. Корпус регрессий.

Command / state machine   Терминология для тестирования последовательности операций, а не одиночного входа — сгенерированный список Command, прогоняемый и против реальной системы, и против упрощённой модели в памяти. См. State machine: концепции.