首页 > 解决方案 > 如何强制 symfony 的 phpunit 桥使用 phpunit 6.5 而不是 5.7?

问题描述

问题

我正在Symfony 3.3.10使用PHP 7.0.25-0ubuntu0.16.04.1

默认情况下,此组合与phpunit 5.x.

但我想给力phpunit 6.x

语境

当我第一次调用vendor/bin/simple-phpunit时,它会安装源代码中所述的phpunit/phpunit版本:5.7.*

https://github.com/symfony/phpunit-bridge/blob/v3.4.11/bin/simple-phpunit

第 18-27 行:

if (PHP_VERSION_ID >= 70200) {
    // PHPUnit 6 is required for PHP 7.2+
    $PHPUNIT_VERSION = getenv('SYMFONY_PHPUNIT_VERSION') ?: '6.5';
} elseif (PHP_VERSION_ID >= 50600) {
    // PHPUnit 4 does not support PHP 7
    $PHPUNIT_VERSION = getenv('SYMFONY_PHPUNIT_VERSION') ?: '5.7';
} else {
    // PHPUnit 5.1 requires PHP 5.6+
    $PHPUNIT_VERSION = '4.8';
}

由于我的 PHP 版本是7.0它选择 phpunit 版本5.7

尝试过的解决方案

6.5我看到如果我在环境变量中设置它,我可能会“强制”桥与 phpunit 一起使用:

在外壳中,我这样做:

rm -Rf vendor
export SYMFONY_PHPUNIT_VERSION=6.5
composer install
vendor/bin/simple-phpunit

现在我正确地得到:PHPUnit 6.5.8

相反,如果我注销并再次登录,它会丢失 env-var 和下一次调用,vendor/bin/simple-phpunit并强制安装 5.7。

不要告诉我放入 .bashrc

我已经知道我可以将 env-var 设置到我的 bash 脚本中,等等等等,但这不是一个可接受的解决方案,原因有两个:

  1. 我维护了 50 多个存储库。始终在所有 shell 中设置此设置可能会对其他项目产生副作用。
  2. 如果我让另一个开发人员在这个 repo 上工作,他应该能够做git clone++composer install并且vendor/bin/simple-phpunit它应该是正确的测试,没有额外的手动步骤。

问题

是否可以告诉项目(可能在 中的composer.json某些内容)进行一些花哨的设置,以便 symfony 的 phpunit 桥被迫phpunit 6.x(例如6.5)在5.7版本的所有安装中使用(例如)repo 并且依赖于 repo 外部的任何全局?

标签: symfonyphpunitcomposer-phpversionbridge

解决方案


从 4.1 版开始,您可以在phpunit.xml/中进行配置phpunit.xml.dist

<php>
    <env name="SYMFONY_PHPUNIT_VERSION" value="6.5" />
</php>

推荐阅读