-
-
Notifications
You must be signed in to change notification settings - Fork 0
Testing
github-actions[bot] edited this page Jul 15, 2026
·
1 revision
Внедряйте фабрики через конструктор и подменяйте их зависимости:
use CloudCastle\Clock\MockClock;
use CloudCastle\Uuid\Contract\RandomSourceInterface;
use CloudCastle\Uuid\UuidFactory;
// детерминированная случайность для теста
final class FixedRandom implements RandomSourceInterface
{
public function bytes(int $length): string
{
return str_repeat("\xAB", $length);
}
}
$factory = new UuidFactory(
clock: MockClock::from('2026-01-01 00:00:00', 'UTC'),
random: new FixedRandom(),
);
$factory->uuid7()->toString(); // одна и та же строка в каждом прогонеПроверка кода, принимающего идентификаторы, — без моков:
Uuid::isValid($ввод); // bool, не бросает
Uuid::fromString($ввод); // InvalidIdentifierException при мусореАктуальные пороги (значения подставляются из конфигов автоматически):
Сгенерировано из конфигов проекта — правьте infection.json.dist / phpmd.xml / tools/coverage-check.php / composer.json, не таблицу.
| Порог | Значение |
|---|---|
Mutation MSI (minMsi) |
≥ 98% |
Mutation Covered MSI (minCoveredMsi) |
≥ 98% |
| Mutation timeout | 120 с |
| Покрытие строк — проект | ≥ 98% |
| Покрытие строк — каждый файл | ≥ 98% |
| Класс: цикломатическая сложность | ≤ 50 |
| Класс: полей | ≤ 15 |
| Класс: методов | ≤ 25 |
| Класс: public-методов | ≤ 20 |
| PHP (runtime) | ≥ 8.1 |
| PHP (CI-матрица) | 8.1–8.5 |
Пять тестовых сьютов:
| Сьют | Что проверяет |
|---|---|
unit |
Каждый класс: happy-path и все пути отказа, вектора RFC 9562 |
integration |
Детерминизм с MockClock, взаимная совместимость с 5 аналогами |
security |
Злые входы, log-injection, битовые инварианты, несмещённость NanoID |
load |
Уникальность и монотонность на объёме, стабильность памяти |
performance |
Бюджеты горячих путей с многократным запасом |
Запуск:
composer test # все сьюты
composer test:coverage # с покрытием и порогом на каждый файл
composer infection # мутационное тестирование
composer ci # полный конвейер (как в CI)CloudCastle Uuid · · PHP 8.1+
GitHub · Packagist · Releases · Discussions · Issues
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)