当前位置: 首页 > 知识库问答 >
问题:

替换Symfony容器中的专用服务以进行测试

白翰海
2023-03-14

是否可以替换DI容器中的私有服务?我需要在我的测试环境中这样做,这样我就可以运行集成测试,但仍然可以模拟对外部API的HTTP调用。

例如,我有这样的代码来设置HttpClientInterface的模拟:

$response = new MockResponse('"some json body"');
$client = new MockHttpClient([$response]);
self::$container->set(HttpClientInterface::class, $client);

// Execute controller / command and perform assertions
// ...

我已经尝试使用下面的配置将HttpClientInterface定义为我的测试环境的公共服务,但这不起作用,因为它是不可实例化的(它是一个接口)。

services:
  Symfony\Contracts\HttpClient\HttpClientInterface:
    public: true

共有1个答案

东郭淇
2023-03-14

我通过创建自己的MockHttpClient类来解决这个问题,该类不需要在构造函数中设置响应。根据Symfony希望容器不可变的方式,在运行时替换容器中的服务似乎是错误的方式

 类似资料:
  • 我有一个php docker容器,我的Symfony项目在哪里。 这是我的docker-compose.yml 我想使用以下命令启动我的symfony项目: 但当我想访问url时,它不起作用。我收到以下错误消息: localhost页不行 localhost未发送任何数据。 我该怎么解决这个问题? PS:我用docker for mac 和输出: [2016-08-06 14:09:53]php.

  • 问题内容: 我正在测试一个应用程序,该应用程序从邮箱中取出邮件,根据该邮件的内容执行一些操作,然后根据操作结果发送响应邮件。 我正在寻找一种为该应用程序编写测试的方法。理想情况下,我希望这些测试能够启动自己的邮件服务器,将测试电子邮件推送到该邮件服务器上的文件夹中,并让我的应用程序将邮件从测试开始的邮件服务器中删除。 配置应用程序以使用邮件服务器并不困难,但是我不知道在哪里寻找在Java中启动邮件

  • 我正在寻找一种方法来模拟Controller中使用的服务bean,这样我就可以使用MockMVC只测试Controller。但是我找不到一个简单的方法来用Spock Mock代替real bean。一切都使用spring-boot 1.3.2版本。更多细节如下: 我有一个以下控制器类 和集成Spock测试: 我需要一种方法来替换这个autowired bean,用一个mock/stub这样我就可以

  • 我正在使用spring Boot1.5.9编写一个小型rest服务器。我刚开始使用初始化代码,就被这种奇怪的行为卡住了。 我有个小测试- 最初,Application.Properties被忽略。在我添加了@SpringBootTest注释之后,application.properties被读取,但开始出现以下错误。 配置bean如下所示- 而且 我确实使用@EnableAutoConfigura

  • 我的目标是建立一个环境,让CircleCI在不同的浏览器中运行BrowserStack上的e2e测试。 我的测试假设有一个模拟服务器在运行。(例如,测试正在检查是否已对模拟服务器进行了某个调用。)

  • 我需要对Symfony 4中的a用户进行功能测试,但我很难找到方法。订阅服务器具有以下结构 订阅者的流正在接收内部事件,并通过命令总线通过 rabbit 将消息发送到另一个项目。 如何测试调度事件是否执行了进程中的行? 有人有关于在Symfony 4中测试事件和订阅者的最佳实践的文档吗?