gpt4 book ai didi

symfony - 如何在功能测试中使用 symfony 4 模拟服务?

转载 作者:行者123 更新时间:2023-12-02 10:18:35 25 4
gpt4 key购买 nike

我有一个命令总线处理程序,它注入(inject)一些服务:

class SomeHandler
{
private $service;

public function __construct(SomeService $service)
{
$this->service = $service;
}

public test(CommandTest $command)
{
$this->service->doSomeStuff();
}
}

SomeService 有带有外部调用的 doSomeStuff 方法,我不想在测试期间使用它。

class SomeService
{
private $someBindedVariable;

public function __construct($someBindedVariable)
{
$this->someBindedVariable = $someBindedVariable;
}

public function doSomeStuff()
{
//TODO: some stuff
}
}

在测试中我尝试用模拟对象替换服务

public function testTest()
{
$someService = $this->getMockBuilder(SomeService::class)->getMock();
$this->getContainer()->set(SomeService::class, $someService);

//TODO: functional test for the route, which uses SomeHandler
}

第一个问题是这段代码会抛出异常““App\Service\SomeService”服务是私有(private)的,您无法替换它。”

好吧,让我们尝试将其公开:

services.yaml:

App\Service\SomeService:
public: true
arguments:
$someBindedVariable: 200

但这并没有帮助。我收到来自 native SomeService 的响应。让我们尝试使用别名:

some_service:
class: App\Service\SomeService
public: true
arguments:
$someBindedVariable: 200

App\Service\SomeService:
alias: some_service

再次,模拟对象不会被测试使用。我看到来自 native SomeService 的响应。

我尝试附加 Autowiring 选项,但没有帮助。

在测试期间,我应该怎么做才能用整个项目中的一些模拟对象替换我的 SomeService?

最佳答案

要模拟和测试服务,您可以放置​​此配置:

config/packages/test/service.yaml

'test.myservice_mock':
class: App\Service\MyService
decorates: App\Service\MyService
factory: ['\Codeception\Stub', makeEmpty]
arguments:
- '@test.myservice_mock.inner'

关于symfony - 如何在功能测试中使用 symfony 4 模拟服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50573624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com