我在SF4中创建了LoggerTrait,并向其中注入了独白:
App\Logger\LoggerTrait:
calls:
- ['setLogger', ['@logger'], true]
特征配置遵循PSR标准,并通过SF @required标签使用二传手注入:
trait LoggerTrait
{
/**
* @var LoggerInterface|null
*/
protected $logger;
/**
* @required
*
* @param LoggerInterface $logger
*/
public function setLogger(LoggerInterface $logger): void
{
$this->logger = $logger;
}
}
应用程序将按预期方式记录并运行,但是通过simple-phpunit运行测试后,我发现记录器未加载:
$ vendor/bin/simple-phpunit
PHPUnit 8.2.5 by Sebastian Bergmann and contributors.
Runtime: PHP 7.2.20 with Xdebug 2.6.1
Testing
........E
Time: 1.31 seconds, Memory: 14.00 MB
There was 1 error:
1) App\Tests\Unit\Http\ExceptionListenerTest::testOnKernelException
Error: Call to a member function info() on null
我已经能够通过在测试类上扩展KernelTestCase并启动内核来解决上述问题,例如下面的示例,但这并没有太多的空间来模拟其他一些类,而且似乎没有如此理想的方式是在每个测试类上启动内核,因此基本上我想知道是否有一种更好的方法可以运行我的测试环境和测试用例,而这不在下面?
public function testMyTest(): void
{
self::bootKernel();
$container = self::$kernel->getContainer();
$container = self::$container;
$response = $container->get(MyClass::class)->myMethod();
}