【问题标题】:PHPUnit Symfony v3.4 inheritance is deprecated不推荐使用 PHPUnit Symfony v3.4 继承
【发布时间】:2018-06-02 23:42:19
【问题描述】:

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

剩余的弃用通知 (1)

1x:Bundle 继承自 3.4 起已弃用,并将在 4.0。 1x 在 GeoTest::testDistanceDuration 中来自 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);
}

【问题讨论】:

  • 也许我累了,但 Functional Tests 在 Symfony4 中也一样,弃用指的是 Bundle Inheritance。也许文档中有错误?可能您使用包继承覆盖了与此测试相关的某些内容?
  • @gp_sflover 我也试过功能测试方法,还是一样的错误。
  • 我还没有升级任何项目 :-) (还有任何测试),但是你认为在新的 Symfony 4.1 安装上做一个简单的测试然后排除(如果它给你同样的错误)该问题不是由于未更新的文档引起的吗?好奇怪……

标签: php symfony phpunit symfony4 symfony-3.4


【解决方案1】:

眼见为实

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

Bundle 继承自 3.4 起已弃用,并将在 4.0 中删除。

这是什么意思?这可能意味着您/某人创建了一个覆盖 getParent() 函数的包(例如 MyBundle),如下所示:

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 你需要使用替代解决方案来覆盖那些 元素。

【讨论】:

    【解决方案2】:

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

    根据Symfony 3.4 Bundle Inheritance documentation

    Bundle 继承自 Symfony 3.4 以来已被弃用,并将在 4.0 中删除。

    所以也许按照你自己的逻辑,你扩展了另一个包。您应该检查您的 AppBundle 或您拥有的任何东西。或者您使用第三方捆绑包(与 Composer 一起安装),其功能相同。

    您有 2 个解决方案:

    1. 通过更新您自己的逻辑或更新导致此弃用的第三方包来修复弃用。如果此捆绑包没有任何更新,您应该考虑停止使用它。
    2. 如果您现在不想修复它,您应该使用PHPUnit Bridge忽略此弃用通知(显然,风险自负)。特别是Marking the Test as Legacy

    编辑:

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

    【讨论】:

    • 它没有通过测试。我尝试了一个非常简单的测试,但我发现错误是由`$client = static::createClient();` 代码引起的,这也是所有测试和 Symfony 测试示例的一部分。如果测试通过了,我可以让它静音,但事实并非如此。
    • 您没有显示您的测试报告,您只显示了折旧通知的报告,我们怎么知道可以解决您的问题?是的
    • 所以弃用通知不是具体的错误。请编辑您的帖子并添加确切的错误报告,以便提出相应的解决方案
    • 测试报告显示此错误:Error : Call to undefined method Symfony\Component\Yaml\Parser::parseFile()
    • 将 phpunit 更新为 5.7.27 使其工作状态并通知错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2011-10-07
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    相关资源
    最近更新 更多