Квест → Как хакнуть форму
Попытались: 598
Прошли: 77
Прошли: 77
Квест вновь доступен для прохождения !
Небольшая заметка как можно тестировать трейты в PHP 7. Простой и изящный способ, найденный на просторах.
Т.к. PHP трейты не могут быть инстанциированы сами по себе, то их юнит-тестирование кажется невозможным. Однако, создав обычный класс, который использует трейт, вы можете легко написать код теста для этого трейта. Примерно так:
trait Greetable { public function hello(int $repeat): string { return str_repeat('Hello!', $repeat); } } class GreetableBeings { use Greetable; } class GreetableTest { public function testHello() { $g = new GreetableBeings(); assert($g->hello(1) === 'Hello!'); assert($g->hello(2) === 'Hello!Hello!'); assert($g->hello(3) === 'Hello!Hello!Hello!'); } } (new GreetableTest)->testHello();
Правда, каждый раз создавать для трейта класс, и создавать его в отдельном файле, не очень удобно да и попросту лень.
Но поскольку в PHP 7 появились анонимные классы, нам больше не придется беспокоиться о создании класса для тестирования.
trait Greetable { public function hello(int $repeat): string { return str_repeat('Hello!', $repeat); } } class GreetableTest { public function testHello() { $g = new class { use Greetable; }; // anonymous class assert($g->hello(1) === 'Hello!'); assert($g->hello(2) === 'Hello!Hello!'); assert($g->hello(3) === 'Hello!Hello!Hello!'); } } (new GreetableTest)->testHello();