如何检测PHPUnit的版本

22
我正在使用较旧版本的PHPUnit(3.4)编写单元测试,因此无法使用手册中列出的所有支持的断言。虽然我可以重新设计测试以在我的环境中进行即时支持,但我想让我的测试依赖于当前版本的PHPUnit,这样当我的或任何其他人的测试环境提供PHPUnit 3.5+时,它将使用assertsInstanceOf()。
我认为PHPUnit会自动定义某种常量,但我没有找到任何关于它的文档。
有没有一种方法可以在调用命令行时不需要定义常量来实现这一点?

@zerkms:试图与我的发行版保持同步。预计其他人在他们的系统上运行测试,因此可能不使用最新的软件。 - soletan
@Marc B:我想在代码中实现它,因为我正在使用“phpunit <相对路径名称到测试类文件夹>”调用所有测试,然后需要跳过一些测试或根据使用的phpunit版本切换行为...这是某种条件编码。 - soletan
@zerkms 这不是你的问题。 - eyurdakul
5个回答

21
你可以使用\PHPUnit\Runner\Version [git]类及其静态方法id()来获取正在运行的PHPUnit版本:
$phpUnitVersion = \PHPUnit\Runner\Version::id(); # 9.5.19

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


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


如果stackoverflow.com允许我这样做(关键词:徽章),我会这样做。 - soletan

17

适用于Mac:

phpunit --version

@Marc B


1
同样适用于Linux操作系统。 - T30
2
同样适用于Windows操作系统。 - Lakshminarayanan Guptha
这个CLI有用的命令不依赖于平台。显然,它是在版本4.7.5中引入的。或者至少git历史记录显示了这一点。我建议通过编程寻找其他方法。 - Guillermo Garcia

7

您可以在测试之前添加 注解

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

1

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

0
以上的答案更可能符合您的情况,但如果您:
  1. 想要使用终端。
  2. 您有不同版本的PHPunit项目,并且想要检查特定版本。
前往您的PHPunit安装目录(最有可能是vendor),并运行以下命令:
egrep -r "Version.*\('.*'" phpunit/phpunit/src/Runner/Version.php --include=*.php --color

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接