【问题标题】:How to detect version of PHPUnit如何检测 PHPUnit 的版本
【发布时间】:2023-03-22 06:55:02
【问题描述】:

我正在使用旧版本的 PHPUnit (3.4) 编写单元测试,因此无法使用 3.5 和 3.6 手册中列出的所有支持的断言。虽然我可以在我的环境中重新设计测试以获得即时支持,但我想让我的测试依赖于 PHPUnit 的当前版本,以便在我或任何其他人的测试环境提供 PHPUnit 3.5+ 时使用 assertsInstanceOf() .

我以为 PHPUnit 会自动定义某种常量,但我找不到任何关于它的文档。

在命令行调用时,有没有什么方法可以在不需要定义常量的情况下实现这一点?

【问题讨论】:

  • @zerkms:尝试与我的发行版保持同步。期待其他人在他们的系统上运行测试,因此可能没有使用最新的软件。
  • @Marc B:我想在代码中实现它,因为我使用“phpunit ”调用所有测试,然后需要一些测试来跳过或切换行为,具体取决于使用的 phpunit 版本......某种条件编码。
  • @zerkms 这不是你的问题

标签: php phpunit


【解决方案1】:

在 mac 上工作:

phpunit --version

@Marc B

【讨论】:

  • 同样适用于 Linux
  • 也适用于 Windows
  • 这个 CLI 有用的命令不依赖于平台。显然,它是在version 4.7.5 上介绍的。或者至少这是 git 历史所显示的。我建议以编程方式寻找其他方法。
【解决方案2】:

您可以在测试前添加an annotation

/**
 * @requires PHPUnit 3.7.32
 */
function testRequiringCertainPHPUnit() {
}

【讨论】:

    【解决方案3】:

    您可以使用\PHPUnit\Runner\Version[git] 类及其静态id() 方法获取运行的PHPUnit 版本:

    $phpUnitVersion = \PHPUnit\Runner\Version::id(); # 9.5.19
    

    基于此 - 停止测试执行或做任何你想做的事情。


    在 PHPUnit 完全切换到 PHP 命名空间 (PHPUnit 6) 之前,旧的类名是 PHPUnit_Runner_Version[git]

    【讨论】:

    • 谢谢!这就是我一直在寻找的。​​span>
    • 如果 stackoverflow.com 允许我这样做,我会这样做(关键字:徽章)。
    【解决方案4】:

    2020 年解决方案

    use PHPUnit\Runner\Version as PHPUnitVersion;
    
    die(PHP_EOL . PHPUnitVersion::id() . PHP_EOL); // 9.2.6
    die(PHP_EOL . PHPUnitVersion::series() . PHP_EOL); // 9.2
    die(PHP_EOL . explode('.', PHPUnitVersion::id())[0] . PHP_EOL); // 9
    

    【讨论】:

      【解决方案5】:

      以上答案更可能符合您的情况,但如果您:

      1. 想使用终端。
      2. 您的项目具有不同版本的 PHPunit,并希望查看特定版本。

      转到 PHPunit 安装的主目录(很可能是 vendor)并运行:

      egrep -r "Version.*\('.*'" phpunit/phpunit/src/Runner/Version.php --include=*.php --color
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-31
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多