咨询 / 公开
0.1.0
2018-03-05 06:39 UTC
Requires (Dev)
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-08-28 06:46:44 UTC
README
尽管大部分情况下只需要对类公共方法进行单元测试,但有时访问受保护或私有方法属性也是必要的或有帮助的。Exposer 提供了一种方便的方式来做到这一点,同时保持测试的清晰和简洁。
安装
通过 Composer 安装
$ composer require konsulting/exposer
使用方法
考虑以下类
class ClassUnderTest { protected $secret = 'My secret'; protected static $anotherSecret = 'My static secret'; protected function add($number1, $number2) { return $number1 + $number2; } protected static function multiply($number1, $number2) { return $number1 * $number2; } }
有多种方法可以测试此类上的受保护方法和属性。
基本 Exposer
最直接的方法是使用 BaseExposer
类。主题必须传递到每个方法中,可以是实例或(字符串)类名。
use Konsulting\Exposer\BaseExposer; // With an instance BaseExposer::hasMethod(new ClassUnderTest, 'add'); // true BaseExposer::invokeMethod(new ClassUnderTest, 'add', [1, 1]); // 2 BaseExposer::getProperty(new ClassUnderTest, 'secret'); // 'My secret' // Static context BaseExposer::hasMethod(ClassUnderTest::class, 'multiply'); // true BaseExposer::invokeMethod(ClassUnderTest::class, 'multiply', [2,2]); // 4 BaseExposer::getProperty(ClassUnderTest::class, 'anotherSecret'); // 'My static secret'
Exposer
Exposer
类允许使用类的不可访问方法属性,就像它们是公开的一样。
use Konsulting\Exposer\Exposer; $exposer = Exposer::make(new ClassUnderTest); $exposer->add(1, 1); // 2 $exposer->multiply(2, 2); // 4 $exposer->secret; // 'My secret' $exposer->anotherSecret; // 'My static secret' // These non-magic methods are also available $exposer->invokeMethod('add', [1, 1]); // 2 $exposer->getProperty('secret'); // 'My secret'
Exposer 还可以访问类的静态方法属性,而无需提供实例。
use Konsulting\Exposer\Exposer; $exposer = Exposer::make(ClassUnderTest::class); $exposer->multiply(2, 2); // 4 $exposer->anotherSecret; // 'My static secret' $exposer->invokeMethod('multiply', [2, 2]); // 4 $exposer->getProperty('anotherSecret'); // 'My static secret'
注意: 静态方法和属性可以从实例上下文中访问,但当然非静态方法和属性不能从静态上下文中访问。