flarone/reflection

测试任何类中的私有/受保护的函数/属性

1.0 2022-11-16 00:00 UTC

This package is auto-updated.

Last update: 2024-09-17 02:32:14 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License
使用任何测试包和零配置测试您的 私有/受保护 函数/属性。

新功能:可以同时反射多个类。

用法

步骤 1:通过 Composer 安装

composer require flarone/reflection --dev

步骤 2:导入特性

在您的任何包的 TestClass 中导入 Flarone\Reflection\ReflectableTrait。例如:PhpUnitPhpSpecLaracasts\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 许可证