我想要嘲笑一个班来测试它。它有private property
detail
,由网络请求设置。我试图通过模拟property
来测试其他methods
之前设置json file
。一切都工作正常,但是,当它是一个私人财产时,我似乎无法设置该属性,但当它是受保护的属性时,它就可以工作。
$mockedClass = \Mockery::mock( Myclass::class )->makePartial();
$reflection = new \ReflectionClass($mockedClass);
$property = $reflection->getProperty( 'detail' );
$property->setAccessible(true);
$property->setValue($mockedClass, $jsonData );
所以当detail
为private property
时,Mockery会抛出Property detail does not exist
,但当我detail
受到保护时,它会有效。
我不想让detail
成为protected property
,因为它不需要,但我需要这样做才能测试它。
当我在某处阅读时,就像你母亲所说的那样,不要暴露你的私人"。我不想暴露我的私人。
答案 0 :(得分:1)
尝试稍微改变一下:
$mockedClass = \Mockery::mock( Myclass::class )->makePartial();
$reflection = new \ReflectionClass(Myclass::class); // Pass the class name, not the actual mock object
$property = $reflection->getProperty( 'detail' );
$property->setAccessible(true);
$property->setValue($mockedClass, $jsonData );