PHPUnit Symfony v3.4继承已被弃用

PHPUnit Symfony v3.4继承已被弃用,php,symfony,phpunit,symfony4,symfony-3.4,Php,Symfony,Phpunit,Symfony4,Symfony 3.4,升级到Symfony v3.4后。在PHPUnit测试中,我不断遇到以下错误 剩余弃用通知(1) 1x:从3.4开始,捆绑包继承已被弃用,并将在中删除 4.0. GeoTest中的1x::testDistanceDuration from Tests\AppBundle\Util\Geo 下面是测试文件 namespace Tests\AppBundle\Util\Geo; use AppBundle\Util\Geo\GeoException; use Symfony\Bundle\Fram

升级到Symfony v3.4后。在PHPUnit测试中,我不断遇到以下错误

剩余弃用通知(1)

1x:从3.4开始,捆绑包继承已被弃用,并将在中删除 4.0. GeoTest中的1x::testDistanceDuration from Tests\AppBundle\Util\Geo

下面是测试文件
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);
}
公共函数testShowPost()
{
$client=static::createClient();//<这是导致错误的原因
$this->assertEquals(200200);
}

即使它以红色背景出现,也不完全是一个错误。这是通知,但你的考试通过了

根据:

自Symfony 3.4以来,捆绑包继承已被弃用,并将在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>
    

    眼见为实

    让我们假设弃用消息听起来像这样:

    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';
        }
    ...
    
    从3.4开始,Bundle继承已被弃用,并将在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开始不再支持此功能。因此,只要删除此实现,弃用警告就应该停止

    但是直到Symfony 4,无论如何

    这种继承机制传统上用于覆盖某些 第三方捆绑包的模板、控制器和其他元素。在里面 Symfony 4.0您需要使用替代解决方案来覆盖这些问题 元素


    也许我累了,但在Symfony4中也一样,这里的贬义是指。可能是文档中的错误?可能您使用bundle继承覆盖了与此测试相关的某些内容?@gp\u sflover我也尝试过功能测试方法,但仍然会出现相同的错误。我还没有升级任何项目:-)(也没有升级任何测试),但是您认为如何在新安装的Symfony 4.1上进行简单测试,然后排除(如果它给出相同的错误)问题不是由于未更新的文档造成的?太奇怪了…它没有通过测试。我尝试了一个非常简单的测试,但我发现错误是由“$client=static::createClient()引起的;`code,这也是所有测试和Symfony测试示例的一部分。如果测试通过,那么我可以让它静音,但事实并非如此。您没有显示测试报告,您只显示了折旧通知的报告,我们如何知道如何解决您的问题?因此折旧通知不是具体错误。请编辑您的帖子并添加准确的错误报告以提出相应的解决方案测试报告显示此错误:
    错误:调用未定义的方法Symfony\Component\Yaml\Parser::parseFile()
    将phpunit更新为
    5.7.27
    使其处于工作状态,并注意错误