assertSame($expectedProps, array_keys($actualProps)); } /** * @dataProvider provideProperties */ public function test_it_can_retrieve_an_object_property($name) { $object = new ReflectionHelperTestChild(); $property = ReflectionHelper::getProperty($object, $name); $this->assertInstanceOf(ReflectionProperty::class, $property); $this->assertSame($name, $property->getName()); } public function provideProperties() { return [ 'public property' => ['a10'], 'private property' => ['a102'], 'private property of ancestor' => ['a3'] ]; } /** * @expectedException \DeepCopy\Exception\PropertyException */ public function test_it_cannot_retrieve_a_non_existent_prperty() { $object = new ReflectionHelperTestChild(); ReflectionHelper::getProperty($object, 'non existent property'); } } class ReflectionHelperTestParent { public $a1; protected $a2; private $a3; public $a10; protected $a11; private $a12; public static $a20; protected static $a21; private static $a22; } class ReflectionHelperTestChild extends ReflectionHelperTestParent { public $a1; protected $a2; private $a3; public $a100; protected $a101; private $a102; }