【发布时间】:2013-01-27 10:25:12
【问题描述】:
我在模拟父方法时遇到问题,这是示例:
class PathProvider
{
public function getPath()
{
return isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/';
}
}
class Uri extends PathProvider
{
public function getParam($param)
{
$path = $this->getPath();
if ($path == $param)
return 'OK';
else
return 'Bad';
}
}
现在我想要模拟方法 getPath(),并调用 getParam() 方法来接收模拟值。
$mock = $this->getMock('PathProvider');
$mock->expects($this->any())
->method('getPath')
->will($this->returnValue('/panel2.0/user/index/id/5'));
我正在写这部分,但我不知道如何将这个模拟值传递给测试方法。
【问题讨论】:
-
我认为重新设计可能是为了,Uri 不是 PathProvider,它只需要它的服务。
-
@GordonM 完全正确!您应该将 PathProvider 作为依赖项并将其注入 Uri 类(通过控制器或 settter)。不要过度使用继承
标签: php unit-testing mocking phpunit