在计算机科学领域,bridge pattern意味着“将一个抽象层从它的实现层解藕,以便此二者完全独立”。桥使用了封装与聚合,能够使用继承来划分责任给不同的类。

Symfony定义了几个桥,来抽象第三方的类库,比如Doctrine、Monolog、Swiftmailer和Twig。在Symfony 2.7中我们添加了一个新桥,用于PHPUNIT。这个首版本的桥提供了如下功能:

  • 它禁止了PHP在测试时的垃圾收集器以避免segmentation faults;

  • 自动注册所需的类以便加载Doctrine annotations;

  • 在测试包的最末报告deprecation提示的汇总。

最后一个功能对那些正在准备把程序转移到Symfony3的开发者来说非常有用。首先,安装这个全新的PHPUnit桥到程序中,执行以下命令:

1
$  composer require --dev "symfony/phpunit-bridge":2.7.x@beta

接下来,执行测试包(test suite),你就能看到一个“仍然在你程序中使用的”被弱化的Symfony功能的报告:

默认时,deprecation提示会令测试失败。这种行为可以被控制,使用SYMFONY_DEPRECATION_HELPER环境变量(默认值=strict)。改变那个变量的值为weak,就可以令桥忽略deprecation提示。这对于那些因为“向下兼容”原因而必须使用deprecated接口的项目来说是很有用的。

另外,你可以安全地标记一个测试为legacy(遗产),使用下列任何一种方法都可以:

  • 给类名标记一个Legacy前缀;

  • 给方法标记一个testlegacy前缀

  • 令其data provider的命名以providerLegacygetLegacy开头;

  • 添加@group遗产注释(legacy annotation)到这个测试的类或方法。