不推荐使用PHPUnit Symfony v3.4继承

时间:2018-06-02 23:42:20

标签: php symfony phpunit symfony4 symfony-3.4

升级到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);
}

2 个答案:

答案 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 解决方案:

  1. 通过更新您自己的逻辑或更新导致此弃用的第三方捆绑包来修复弃用。如果此捆绑包没有任何更新,您应该考虑停止使用它。
  2. 如果您不想立即解决此问题,则应使用PHPUnit Bridge 默认此弃用通知(显然风险很大)。特别是Marking the Test as Legacy
  3. 修改

      

    但我发现错误是由$ $ 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>