Квест → Как хакнуть форму
Попытались: 736
Прошли: 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();