使用PHPUnit和PHP> = 5.3,可以测试受保护的方法.stackoverflow的以下页面概述了它的最佳实践:
protected static function callProtectedMethod($name, $classname, $params) {
$class = new ReflectionClass($classname);
$method = $class->getMethod($name);
$method->setAccessible(true);
$obj = new $classname($params);
return $method->invokeArgs($obj, $params);
}
Run Code Online (Sandbox Code Playgroud)
使用PHPUnit可以轻松地在抽象类上测试公共方法.使用上述方法可以轻松地测试正常类上的受保护方法.要测试抽象类上的受保护方法必须以某种方式...
我知道PHPUnit派生抽象类并在具体类中"实现"抽象方法并针对该具体类触发测试 - 但我不知道如何将其集成到上面的方法中以获得callProtectedMethodOnAbstractClasses().
你是怎么做这样的测试的?
PS:问题不在于测试受保护方法的真相(参见:白色,灰色和黑盒测试).测试受保护方法的需要取决于您的测试策略.
这是我的班级:
class toyota extends car {
function drive() {
}
function break() {
}
}
class car {
function pre() {
}
}
Run Code Online (Sandbox Code Playgroud)
我有什么方法可以这样做,当我运行$ car-> drive(),$ car-> break()(或丰田中的任何其他函数)时,它会先调用$ car-> pre()然后再调用丰田的功能?
abstract class MyClass
{
private static makeMePublic()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我想让MyClass :: makeMePublic方法可以从外部调用.我在这里看到了一个解决方案:使用PHPUnit测试受保护方法但需要对类进行实例化的最佳实践.在这种情况下,它是不可能的.那么,如何制作"公开"这种方法呢?
有没有办法对类的受保护或私有方法进行单元测试?现在,我公开了很多方法以便能够测试它们,这破坏了 API。
编辑:实际上在这里回答:使用 PHPUnit 测试受保护方法的最佳实践
php ×3
phpunit ×2
abstract ×1
methods ×1
oop ×1
protected ×1
reflection ×1
testing ×1
unit-testing ×1