Григорий Есин: да, конечно 7.1. Вот кстате я их еще не использовал, не совсем понял зачем они и как используются. Не могли бы вы показать примерчик ?
А так с наследованием решилось, спасибо.
trait MyTrait
{
public function myTraitMethod()
{
return 'my trait method';
}
}
class MyClass
{
use MyTrait;
public function myClassMethod()
{
return $this->myTraitMethod();
}
}
class MyClassTest extends TestCase
{
public function test_myClassMethod()
{
$myMock = new class extends MyClass {
public function myTraitMethod()
{
return 'my mocked method';
}
};
static::assertSame('my mocked method', $myMock->myClassMethod());
}
}
Хотя это не очень удобно в кейзе, когда в методе setUp создаётся заготовка для мока и потом в конкретном тест-методе заготовка подкручивается до конкретного мока.
С другой стороны, когда поведение мока становится сложным (такое бывает), то описывать это поведение через MockBuilder становится тяжело и в этих случаях я использую как раз анонимные классы.