Fre*_*lin 18
可以模拟受保护的方法,但正如有些人指出的那样,如果您觉得需要模拟这些方法,则可能需要重构代码.
如果您确实想要模拟受保护的方法,可以根据以下示例执行此操作:
$myMock = Mockery::mock('myClass')->shouldAllowMockingProtectedMethods();
Run Code Online (Sandbox Code Playgroud)
使用这个模拟,然后可以像模拟公共方法一样模拟受保护的方法.
小智 6
有时你的代码很好,你认为没有理由改变你的代码来促进测试(我认为这是一个很好的理由),我所做的是在我的对象中使用反射,你甚至可以有这样的辅助方法:
class MockingHelpers
{
public static function mockProperty($object, string $propertyName, $value)
{
$reflectionClass = new \ReflectionClass($object);
$property = $reflectionClass->getProperty($propertyName);
$property->setAccessible(true);
$property->setValue($object, $value);
$property->setAccessible(false);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,accessible 仅适用于反射上下文,因此不会造成损坏。
这不是完美的解决方案,有时您的代码中可能确实存在问题,但这可以帮助您!
| 归档时间: |
|
| 查看次数: |
10149 次 |
| 最近记录: |