如何在Symfony中将任何服务注入到WebTestCase子类中?

时间:2018-05-16 20:22:50

标签: unit-testing symfony phpunit

也许我错过了什么......呃,我想是的,但是找不到答案。

WebTestCase生成此构造函数示例:

public function __construct(?string $name = null, array $data = [], string $dataName = '')
{
     parent::__construct($name, $data, $dataName);
}

尝试将我的服务添加为第一个或最后一个参数 - Symfony抛出错误:

Type error: Too few arguments to function Tests\AppBundle\Manager\ContactManagerTest::__construct(), 0 passed in /Library/WebServer/Documents/HEPT/vendor/bin/.phpunit/phpunit-5.7/src/Framework/TestSuite.php on line 568 and at least 1 expected in /Library/WebServer/Documents/HEPT/tests/AppBundle/Manager/ContactManagerTest.php:22

我应该以某种方式直接使用容器吗?如果存在桥类,为什么自动装配不适用于WebTestCase类?

1 个答案:

答案 0 :(得分:1)

WebTestCase用于PHPUnit(与Symfony及其依赖注入无关)的上下文中。

他们实际上生成了内核及其容器,请参阅从Symfony source code中提取的这段代码:

protected static function createClient(array $options = array(), array $server = array())
{
    $kernel = static::bootKernel($options);
    $client = $kernel->getContainer()->get('test.client');
    $client->setServerParameters($server);
    return $client;
}

这意味着您可以像这样轻松访问容器:

$kernel = static::bootKernel($options);
$container = $kernel->getContainer();

请注意,一旦您创建了客户端以进行测试,static::$kernel->getContainer()即可用。