Php 控制Symfony测试中的依赖项
我对我的Symfony 4.2应用程序进行了多项边到边测试。我的意思是使用测试客户机发出web请求,然后对结果进行断言的测试。例如:Php 控制Symfony测试中的依赖项,php,symfony,testing,mocking,symfony4,Php,Symfony,Testing,Mocking,Symfony4,我对我的Symfony 4.2应用程序进行了多项边到边测试。我的意思是使用测试客户机发出web请求,然后对结果进行断言的测试。例如: public function testPageNotFound() { $client = $this->createClient(); $client->request('GET', 'does-not-exist'); $this->assertSame(404, $client->getResponse()-
public function testPageNotFound() {
$client = $this->createClient();
$client->request('GET', 'does-not-exist');
$this->assertSame(404, $client->getResponse()->getStatusCode());
}
在此类测试中,是否有方法更改服务容器中的特定服务
示例问题:我的服务通过名为FileFetcher
的抽象来发出web请求。对于我的测试,我希望使用NullFileFetcher
,这样就不会发出真正的web请求。我如何告诉Symfony使用此双重测试
令人惊讶的是,在主测试文档中没有关于如何完成这个基本测试任务的信息
我尝试的一种方法是在config/packages/test/services.yaml
中进行配置。这不起作用,据我所知是由于Symfony不允许覆盖services.yaml造成的,因为它加载了mainconfig/services.yaml
last:
最后,我只想遵循一些非常基本的测试最佳实践:
任何使用Symfony执行此操作的代码示例都将不胜感激。您应该能够通过在容器中交换服务来覆盖测试中的服务
$this->container->getDefinition('x.x_服务')->setSynthetic(true);
$this->container->set('x.x_服务',新的NullFileFetcher());
需要更新文档:覆盖先前定义的最后一个文件是config/services\u test.yaml
这将帮助您解决您的用例。
请参阅
$kernel->getContainer()
没有getDefinition
方法或任何包含definition
的方法。现在我知道了合成概念,我发现我可以把它放在我的服务中,这使得我的测试工作与测试加倍,但同时使生产代码失败,因为现在它不再按需构造文件获取程序
。我已经将此与atymic他们的答案结合起来,并将服务更改为仅在测试模式下合成。效果很好。不过,我们也有兴趣看到一些由熟悉Symfony的人创建的真实项目中的服务\u test.yaml
文件。你知道吗?