Trait看起来像这样:
trait A{
private $model;
public function __construct($model){
$this->model = $model;
$this->methodToStub();
}
...
}
当我尝试在单元测试中获得带有反射的模拟特征的$ model属性时:
$mock = $this->getMockForTrait(A::class,[],'MockedTrait', false, true, true, ['methodToStub']);
$mock->expects($this->exactly(1))->method('methodToStub');
$mock->__construct('model');
$reflection = new \ReflectionClass(A::class);
$property = $reflection->getProperty('model');
$property->setAccessible(true);
$value = $property->getValue($mock);
我收到此错误:
未定义的属性:MockedTrait :: $ model
任何想法,为什么?
答案 0 :(得分:0)
我看到的问题是您尝试使用A特征的反射来访问MockedTrait :: $模型的值。但可能MockedTrait :: $模型的“签名”与A :: $ model的“签名”不同。
由于Mock对象类是在phpunit中使用eval声明的,因此MockedTrait类是可以访问的,你可以尝试类似下面的内容:
$reflection = new \ReflectionClass(MockedTrait::class);
这应该可行(可能)。