【问题标题】:Symfony - Mocking a service on API functional testsSymfony - 在 API 功能测试上模拟服务
【发布时间】:2020-08-19 03:23:04
【问题描述】:

我有一个 API,我通过功能测试对其进行了测试,并且一切正常。问题出现在以下情况:

我有一个控制器,它通过服务执行外部 API 调用。我想在测试期间模拟该服务,但我不知道该怎么做。

所以这可能是我的代码(例如):

// src/service/MyService.php

class MyService
{
    public function __construct(HttpClientInterface $client) {
        $this->client = $client
    }

    public function call()
    {
        $this->client->get('https://api.com');
    }
}
// src/controller/MyController.php

class MyController
{
    /**
     * @Route("/call")
     */
    public function call(MyService $myService)
    {
        $myService->call();
    }
}
// tests/controller/MyControllerTest.php

class MyControllerTest extends WebTestCase
{
    public function testCall()
    {
        $client = static::createClient();

        $client->request('GET', '/call');

        $this->assertEquals(200, $client->getResponse()->getStatusCode());
    }
}

如何在测试期间模拟 MyService 服务?

【问题讨论】:

  • 严格来说,您并没有真正模拟服务来进行功能测试。模拟用于单元测试。但是,您可以创建 services_test.yaml 文件并严格定义服务以进行测试。这一切都在文档中。

标签: php symfony testing phpunit functional-testing


【解决方案1】:

功能测试不需要它。功能测试意味着您要检查被测“应用程序场景”,您提供了输入并期望一些输出行为。

您需要在这里(如果您想使用模拟)是 MyService 类的单元测试,您应该在其中模拟注入的类。

【讨论】:

    猜你喜欢
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2021-03-28
    • 1970-01-01
    • 2017-10-27
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多