Исключения
Каждый сценарий падения — типизированное исключение с readonly-полями или геттерами, сгенерированное из ReflectionClass по всем @api-типам в src/, а не переписанное из прозы. README называет их по имени; эта страница — справочник по полям.
| Исключение | Когда бросается | Поля / геттеры |
|---|---|---|
PropertyViolationException | Случайный или explicit-прогон фальсифицировал property. | getCounterExample(): CounterExample |
RegressionViolationException | Реплей values-записи из корпуса регрессий всё ещё падает. | getArguments(): array, getSeed(): int |
ExampleViolationException | Падает явный пример. Сообщается как есть — без shrink'а. | getIndex(): int (позиция в списке примеров), getArguments(): array |
GaveUpException | Число отброшенных попыток (Assume::that()) превысило maxDiscards до набора runs успешных проверок. | $propertyName: string, $requiredRuns: int, $successfulRuns: int, $discardedRuns: int, $attempts: int, $maxDiscards: int |
DeadlineExceededException | Один прогон превысил timeoutMs. Сообщается как есть — без shrink'а. | $propertyName: string, $arguments: array, $elapsedMs: float, $timeoutMs: int |
TimeBudgetExceededException | Вся random-фаза превысила budgetMs до набора runs успешных проверок. | $propertyName: string, $budgetMs: int, $elapsedMs: float, $successfulRuns: int, $requiredRuns: int |
GenerationExhausted | Gen::filter() отверг 100 кандидатов подряд, либо sized-коллекция (uniqueArrayOf/dictOf/commands) не смогла достичь $min в рамках бюджета попыток. | $arbitrary: string, $attempts: int |
CoverageViolationException | Не выполнено требование Classify::cover() — даже если все прогоны прошли. | Маркерное исключение, без дополнительных полей. |
PostconditionViolation | Command::postCondition() вернул false (или бросил) во время StateMachine::check(). | $trace: array, $step: int, $command: Command, $model: mixed, $result: mixed |
Не часть контракта
AssumptionSkipped — публичный класс в корневом namespace пакета, но без тега @api: это внутренний сигнал control-flow, который бросает Assume::that(false) для прерывания текущей попытки, перехватываемый интерцептором до того, как доберётся до вашего теста. Не ловите его и не стройте на нём логику — в будущем релизе способ сигнализировать об отбрасывании может измениться внутренне.
Сгенерировано проходом рефлексии по всем @api-типам в src/ (docs/scripts/reflect-api.php) — как это остаётся синхронным с исходниками, см. обзор API.