升级到Symfony v3.4后。我一直在PHPUnit测试中遇到以下错误。
剩余弃用通知(1)
1x:从3.4开始,不推荐使用Bundle继承,并将其删除 4.0。 来自Tests \ AppBundle \ Util \ Geo的GeoTest :: testDistanceDuration中的1x
以下是测试文件
namespace Tests\AppBundle\Util\Geo;
use AppBundle\Util\Geo\GeoException;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class GeoTest extends WebTestCase {
public function testDistanceDuration ()
{
$client = $this->createClient();
$geo = $client->getContainer()->get('geo');
$returnData = $geo->getDistanceDuration([51, -0.34], [51, -0.11]);
$this->assertArrayHasKey('distance', $returnData);
$this->assertArrayHasKey('duration', $returnData);
$this->assertGreaterThan(0, $returnData['distance']);
$this->assertGreaterThan(0, $returnData['duration']);
}
}
如何解决此问题?
编辑,另一个没有通过并给出错误的简单测试。
public function testShowPost()
{
$client = static::createClient(); // < this is causing the error
$this->assertEquals(200, 200);
}
答案 0 :(得分:1)
眼见为实。
让我们假设弃用消息听起来像这样:
从3.4版开始不推荐使用捆绑继承,而在4.0版本中将删除捆绑继承。
是什么意思?这可能意味着您/某人创建了一个捆绑包(例如MyBundle),该捆绑包会覆盖getParent()
函数,如下所示:
class MyBundle extends Bundle
{
/**
* Returns the bundle parent name.
*
* @return string|null The Bundle parent name it overrides or null if no parent
*/
public function getParent()
{
return 'Some3rdPartyBundleName';
}
...
从Symfony 4.0开始不再支持此功能。因此,只需删除此实现,就应该停止弃用警告。
但是why have we used bundle inheritance到Symfony 4为止吗?
传统上,此继承机制用于覆盖某些 模板,控制器和第三方捆绑包的其他元素。在 您需要使用Symfony 4.0替代解决方案来覆盖那些 元素。
答案 1 :(得分:0)
即使出现红色背景,也不是错误。这是一个通知,但你的测试正在通过。
根据Symfony 3.4 Bundle Inheritance documentation:
自Symfony 3.4以来,不推荐使用Bundle继承,将在4.0中删除。
所以也许按照你自己的逻辑,你扩展另一个包。你应该检查你的AppBundle或你拥有的任何东西。或者您使用第三方软件包(与 Composer 一起安装)也可以这样做。
您有 2 解决方案:
修改强>
但我发现错误是由$ $ client = static :: createClient();
引起的
另请检查您是否在 phpunit.xml.dist 中为内核设置了正确的路径:
<?xml version="1.0" charset="utf-8" ?>
<phpunit>
<php>
<server name="KERNEL_DIR" value="/path/to/your/app/" />
</php>
<!-- ... -->
</phpunit>