Перехватчики
Coming Soon
Документация в процессе написания.
Атрибуты с автоматическим подключением интерцептора
Интерцептор можно подключить автоматически через PHP-атрибут, без явной регистрации в пайплайне.
Для этого создайте атрибут, реализующий интерфейс Interceptable\Testo\Pipeline\Attribute\Interceptable, и пометьте его мета-атрибутом #[FallbackInterceptor]. Когда Testo обнаруживает такой атрибут на тесте, указанный интерцептор подключается автоматически.
use Testo\Pipeline\Attribute\FallbackInterceptor;
use Testo\Pipeline\Attribute\Interceptable;
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::TARGET_CLASS)]
#[FallbackInterceptor(SlowTestInterceptor::class)]
final readonly class SlowTest implements Interceptable
{
public function __construct(
public int $thresholdMs = 1000,
) {}
}После этого атрибут можно использовать на тестах, и SlowTestInterceptor будет автоматически подключен к пайплайну:
#[SlowTest(thresholdMs: 500)]
public function heavyComputation(): void
{
// Если тест выполняется дольше 500 мс,
// SlowTestInterceptor может пометить его или залогировать
}Этот подход удобен, когда поведение привязано к конкретным тестам. Именно так устроены атрибуты #[Retry]#[Retry(int $maxAttempts = 3, bool $markFlaky = true)]Объявляет политику повторного запуска теста при падении., #[TestInline]#[TestInline(array $arguments, mixed $result = null)]Объявляет встроенный тест на методе или функции. и #[Bench]#[Bench(array $callables, array $arguments = [], int $warmup = 1, int $calls = 1_000, int $iterations = 10)]Объявляет бенчмарк для сравнения производительности метода с альтернативными реализациями..