Symfony 3.3服务模拟功能测试



在Symfony 3.3之前,它可以在容器上设置模拟服务。现在,由于已经预先定义了服务,因此使用3.3的弃用警告。

覆盖容器中现有或预定义服务的新标准方法是什么?

设置模拟服务?

例如。在我们的情况下,我们设置了一个新的Entity Manager,其新的模拟连接指向用于测试的克隆数据库。

$container->set('doctrine.orm.entity_manager', $testEm);

设置" doctrine.orm.entity_manager"预定义的服务已弃用,因为Symfony 3.3,并且不再支持Symfony 4.0。

我几天前就遇到了同样的问题,我写了一个图书馆来欺骗Symfony的DIC:https://github.com/timesplinter/proxy-mock

这个想法是在config_test.yml中使用"代理"中的"代理"覆盖服务,该类别将所有调用重定向到模拟,然后可以在测试案例中动态设置。

# config_test.yml
services:
    timesplinter.proxy_mock.factory:
        class: timesplinterProxyMockProxyMockFactory
    acme.api.client:
        factory: 'timesplinter.proxy_mock.factory:create'
        arguments: ['AcmeAppBundeServicesApiClient']

这将覆盖原始服务中定义的服务。(xml | yml(具有代理。

在测试案例中,您可以做这样的事情:

// Your container aware test case (this exmaple is for PHPUnit)
$mock = $this->getMockBuilder(ApiClient::class)->disableOriginalConstructor()->getMock();
$container->set('acme.api.client')->setMock($mock);

使用此操作,您的测试将与使用setMock()方法提供的模拟相对。

库非常新,因此可能缺少某些功能。如果您使用它并错过了一些东西,请提供带有所需功能的拉请请求。

最新更新