如何检测PHPUnit的版本

如何检测PHPUnit的版本,php,phpunit,Php,Phpunit,我使用较旧版本的PHPUnit(3.4)编写单元测试,因此无法使用手册3.5和3.6中列出的所有受支持的断言。虽然我可以在我的环境中重新设计测试以获得即时支持,但我希望使我的测试依赖于当前版本的PHPUnit,以便在我或任何其他人的测试环境提供PHPUnit 3.5+时,它就会使用assertsInstanceOf() 我以为PHPUnit会自动定义某种常量,但我找不到任何关于它的文档 在命令行上调用时,有没有办法在不需要定义常量的情况下实现这一点?您可以使用PHPUnit\u Runner\u

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

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


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

您可以使用
PHPUnit\u Runner\u version
类获取版本:


基于此-停止测试执行或执行任何您想要的操作。

要使旧版本的测试不完整:

    if (
        !method_exists('PHPUnit_Runner_Version','id')
        || version_compare(PHPUnit_Runner_Version::id(), '3.7', '<=')
    ) {
        $this->markTestIncomplete('need phpunit >= 3.7 to run this test');
    }
if(
!方法_存在('PHPUnit_Runner_Version','id')
||version_compare(PHPUnit_Runner_version::id(),'3.7','=3.7以运行此测试”);
}
您可以在测试前添加:

/**
 * @requires PHPUnit 3.7.32
 */
function testRequiringCertainPHPUnit() {
}
在mac上工作:

phpunit --version

@Marc B

上述答案更有可能与您的情况相符,但如果您:

  • 我想使用终端
  • 您有具有不同版本PHPunit的项目,并且希望检查特定版本
  • 转到PHPunit安装的主目录(最有可能是供应商)并运行:

    2020解决方案

    使用PHPUnit\Runner\Version作为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
    
    @zerkms:尝试与我的发行版保持同步。希望其他人在他们的系统上运行测试,因此可能不会使用最新软件。@Marc B:我想在代码中实现它,因为我使用“phpunit”调用所有测试然后需要一些测试来跳过或切换行为,具体取决于使用的phpunit版本……某种条件编码。@zerkms这不是你的问题谢谢!这是我一直在寻找的。如果stackoverflow.com允许我这样做(关键字:badges),我会这么做。它从3.0开始存在,已经超过6年了:-)在这种情况下检查方法是否存在有些奇怪:-)很抱歉,我没有时间检查PHPUnit提交历史记录以编写一行代码,如何在PHPUnit 6+中执行相同的操作?在Linux上也可以在Windows上运行此CLI命令非常有用,不依赖于平台。很明显,它是在一个月前推出的。或者至少这是git历史所显示的。我建议以编程方式寻找其他方法。
    egrep -r "Version.*\('.*'" phpunit/phpunit/src/Runner/Version.php --include=*.php --color