flarone / reflection
测试任何类中的私有/受保护的函数/属性
1.0
2022-11-16 00:00 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-09-17 02:32:14 UTC
README
新功能:可以同时反射多个类。
用法
步骤 1:通过 Composer 安装
composer require flarone/reflection --dev
步骤 2:导入特性
在您的任何包的 TestClass
中导入 Flarone\Reflection\ReflectableTrait
。例如:PhpUnit
、PhpSpec
、Laracasts\Integrated
。
对于 PhpUnit
use Flarone\Reflection\ReflectableTrait class ModelTest extends PHPUnit_Framework_TestCase { use ReflectableTrait; }
就这样。您可以开始了。 :)
现在您可以执行以下操作来测试私有/受保护的函数或属性
实例化 Reflector
使用如下 reflect()
方法
$randomClass = new RandomClass(); $this->reflect($randomClass);
此方法不可链式调用
注意:建议在 constructor
或 PhpUnit 的 setUp()
方法等中使用此方法。
使用 on()
方法如下
$randomClass = new RandomClass(); $this->on($randomClass)->call($method, $args = []);
此方法可链式调用 **注意:** 此方法只对类对象进行一次反射。即仅对一次方法或属性的调用。它可以用于同时反射多个类。
可用方法
reflect($classObj);
描述:反射类对象
on($classObj);
描述:反射类对象。这是可链式调用的方法。
可能的链式调用
$this->on($classObject)->callMethod($arguments = []); $this->on($classObject)->call($method, $arguments = []); $this->on($classObject)->get($property); $this->on($classObject)->get{Proerty};
#### call($method, $arguments = []); **描述:** 调用反射类对象的任何有效公共/私有/受保护方法。此方法不可链式调用。
#### call{Method}($arguments = []); **描述:** 与 `call()` 相同,但动态调用方法。此方法不可链式调用。
{method} 可以是反射类对象的任何有效公共/私有/受保护方法。
#### get($property); **描述:** 获取反射类对象的任何有效公共/私有/受保护属性值。此方法不可链式调用。
#### get{Property}; **描述:** 与 `get()` 相同,但动态获取属性值。此方法不可链式调用。
{property} 可以是反射类对象的任何有效公共/私有/受保护属性。
#### set($name, $value); **描述:** 设置反射类对象的任何有效公共/私有/受保护属性的值。此方法不可链式调用。
#### set{Property} = $value; **描述:** 与 `set()` 相同,但动态设置属性值。此方法不可链式调用。
{property} 可以是反射类对象的任何有效公共/私有/受保护属性。
同时反射多个类
示例
// Considering phpunit protected function setUp() { $this->foo = new Foo(); $this->reflect($this->foo); } public function test_something() { $hello = $this->callSayHello(); // this will call SayHello() of class `Foo` $this->assertEquals('Hello', $hello); $hello = $this->on(new FooBar())->callSayHello(); // this will call SayHello() of class `FooBar` $this->assertEquals('Hello FooBar', $hello); $hello = $this->callSayHello(); // this will call SayHello() of class `Foo` $this->assertEquals('Hello', $hello); }
贡献
请随时报告问题或发起 Pull Requests。如果您发现这份文档有任何改进之处,请随时为此打开一个 issue。
许可证
php-reflection-deflector 是从 skagarwal/reflection
分支出来的。php-reflection-deflector 是开源软件,许可协议为MIT 许可证