r83dev / test-accessible
可访问特性,用于在测试中调用受保护的方法、属性和常量。
v1.0.0
2024-05-30 13:33 UTC
Requires
- php: ^8.0
README
一个测试辅助类,特别是针对单元测试,用于访问不可访问的方法或获取/注入属性。
安装
通过composer安装
dcrr composer req --dev r83dev/test-accessible
用法
在您的测试中使用AccessibleTrait
class MyTest { use R83Dev\TestAccessible\AccessibleTrait; }
使用其中一个辅助函数来访问实例化对象的私有或受保护的内容。
方法
调用不可访问的方法
$this->callInaccessibleMethod($object, 'method_name', 'argument1', 'argument2', ...);
获取不可访问的属性
$this->getInaccessibleProperty($object, 'property_name');
设置不可访问的属性
$this->setInaccessibleProperty($object, 'property_name', 'new_property_value');
获取不可访问的常量
$this->getInaccessibleConstant($object, 'CONSTANT_NAME');
PHPUnitTest 示例
这只是一个功能演示,从内容方面来说没有用处。
要测试的单元示例
class MyUnit { protected const STATE_ON = 'on'; protected const STATE_OFF = 'off'; private string $state = self::STATE_ON; protected function setState(string $state): void { $this->state = $state; } public function getState(): string { return $this->state; } }
单元测试示例
class MyUnitTest extends PHPUnit\Framework\TestCase { use R83Dev\TestAccessible\AccessibleTrait; private ?MyUnit $unit; protected function setUp(): void { $this->unit = new MyUnit(); } #[\PHPUnit\Framework\Attributes\Test] public function getStateShouldReturnCorrectInitialValue(): void { $this->assertSame( $this->getInaccessibleConstant($object, 'STATE_ON'), $this->getInaccessibleProperty($this->unit, 'state') ); } #[\PHPUnit\Framework\Attributes\Test] public function getStateReturnsNewValueFromSetter(): void { $off = $this->getInaccessibleConstant($object, 'STATE_OFF'); $this->callInaccessibleMethod($object, 'setState', $off) $this->assertSame($off, $this->unit->getState()); } #[\PHPUnit\Framework\Attributes\Test] public function getStateReturnsNewValueFromPropertyAllocation(): void { $this->setInaccessibleProperty($object, 'state', 'unknown') $this->assertSame('unknown', $this->unit->getState()); } }