我对依赖于需要在测试环境中模拟的第 3 方 API 的控制器进行了一系列测试。我们覆盖功能测试客户端爬虫并模拟出我们需要测试的依赖项。这里的关键是模拟在每次测试中都会发生变化。
在 Symfony 3.2 中,这工作得很好,但在 Symfony 3.3 中,由于现在注入服务的方式,我收到了许多弃用警告:
一个示例控制器测试用例:
class MyControllerTest extends WebTestCase
{
private static $kernelModifier = null;
public function setKernelModifier(\Closure $kernelModifier)
{
self::$kernelModifier = $kernelModifier;
$this->ensureKernelShutdown();
}
protected static function createClient(array $options = [], array $server = [])
{
static::bootKernel($options);
if ($kernelModifier = self::$kernelModifier) {
$kernelModifier->__invoke();
self::$kernelModifier = null;
};
$client = static::$kernel->getContainer()->get('test.client');
$client->setServerParameters($server);
return $client;
}
protected function getPropertyClient()
{
$mockService = (new PropertyMock())->getPropertyMock();
$this->setKernelModifier(function () use ($mockService) {
static::$kernel->getContainer()->set('app.property_service', $mockService);
});
return static::createClient();
}
protected function getPropertyFailureClient()
{
$mockService = (new PropertyMock())->getPropertyFailureMock();
$this->setKernelModifier(function () use ($mockService) {
static::$kernel->getContainer()->set('app.property_service', $mockService);
});
return static::createClient();
}
}
实际测试:
public function testInvalidPropertyRequest()
{
$client = $this->getPropertyClient();
$client->request(
'POST',
'/webhook/property',
[],
[],
[],
''
);
$this->assertEquals(400, $client->getResponse()->getStatusCode());
}
弃用错误:
设置“app.property_service”预定义服务自 Symfony 3.3 以来已被弃用,Symfony 4.0 不再支持:3x
我已经阅读了 3.3 版本文档、BC 中断和弃用,并且无法弄清楚在配置容器服务后如何用模拟替换容器服务。
任何帮助表示赞赏。