使用 PHPUnit 测试受保护方法的最佳实践
2022-08-30 06:02:03
如果您将 PHP5 (>= 5.3.2) 与 PHPUnit 配合使用,则可以在运行测试之前使用反射将私有和受保护的方法设置为公共方法,以测试这些方法:
protected static function getMethod($name) {
$class = new ReflectionClass('MyClass');
$method = $class->getMethod($name);
$method->setAccessible(true);
return $method;
}
public function testFoo() {
$foo = self::getMethod('foo');
$obj = new MyClass();
$foo->invokeArgs($obj, array(...));
...
}
Teastburn有正确的方法。更简单的是直接调用该方法并返回答案:
class PHPUnitUtil
{
public static function callMethod($obj, $name, array $args) {
$class = new \ReflectionClass($obj);
$method = $class->getMethod($name);
$method->setAccessible(true);
return $method->invokeArgs($obj, $args);
}
}
您可以通过以下方式在测试中简单地调用它:
$returnVal = PHPUnitUtil::callMethod(
$this->object,
'_nameOfProtectedMethod',
array($arg1, $arg2)
);