我有一个symfony服务,其中一些方法使用redis连接,而另一些方法则不使用。
class ServiceA
{
private $redis;
public function __construct($redis)
{
$this->redis = $redis;
}
public function getRequest($param1, $param2)
{
$result = $param1+ $param2;
return $request;
}
.. other methods which use $redis connection
}
我正在为使用只有getRequest方法的代码编写功能测试(此方法不需要redis连接),但由于构造函数将连接作为参数,当我运行测试时,它会尝试连接redis服务器。
我该如何编写模拟服务,完全不使用redis连接并忽略原始构造函数?
我尝试了下面提到的方法,但没有成功。即使我禁用了原始构造函数,它仍然尝试连接redis。
http://blog.lyrixx.info/2013/04/12/symfony2-how-to-mock-services-during-functional-tests.html
$serviceA = $this->getMockBuilder('ServiceA')
->disableOriginalConstructor()
->getMock();
static::$kernel->getContainer()->set('my_bundle.service.a', $serviceA);
$client->getContainer()->set('my_bundle.service.a', $serviceA)
这段代码是否意味着$container->get()
不再实例化服务?我们想要“覆盖”该服务,但仍希望容器在之后注入该服务的依赖项。 - Rvanlaak