使用PHPUnit 7测试旧版PHP版本

4

我正在使用Composer来处理依赖。

我的项目依赖于PHP 5.5或更高版本,因此我希望使用PHPUnit 7在PHP 5.5-7.2(最新版)上对其进行测试。

我已经设置了Travis CI测试以使用不同版本的PHP:

language: php
php:
  - '5.5'
  - '5.6'
  - '7.0'
  - '7.1'
  - '7.2'
  - hhvm # on Trusty only
  - nightly

问题在于PHPUnit 7需要PHP 7.1,因此我无法在PHP 5.5-7.0上测试项目。

我可以使用旧版本的PHPUnit来测试旧版本的PHP,但问题是在PHPUnit 6之后,PHPUnit的代码单位都有命名空间,因此我需要编写不同的测试用例来适配PHPUnit 4-5和PHPUnit 6-7。

如何在Travis CI上使用PHPUnit 7测试老版本的PHP?


1
“问题在于 PHPUnit 6 之后,PHPUnit的代码单元都使用命名空间,因此我不得不编写不同的测试用例来适配 PHPUnit 4-5 和 PHPUnit 6-7” 这是不正确的,因为 PHPUnit 4.8 与 PHPUnit 5.6 具有相同的向后兼容层。简而言之:PHPUnit\Framework\TestCase 可以用于 PHPUnit 4.8、PHPUnit 5.6、PHPUnit 6 和 PHPUnit 7。 - Sebastian Bergmann
1
@SebastianBergmann PHPUnit 8 现在具有返回类型声明,因此旧的测试用例现在与之不兼容。现在该怎么办?我仍然想为 PHP 5.5+ 使用相同的测试用例。 - Filip Š
1个回答

3

Sebastian Bergmann 提醒 我,PHPUnit 4.8 具有向前兼容性,因此我可以在 PHPUnit 4.8、PHPUnit 5.6、PHPUnit 6 和 PHPUnit 7 中使用命名空间语法。

“问题是在 PHPUnit 6 之后,PHPUnit 的代码单元被命名空间化,因此我必须为 PHPUnit 4 - 5 和 PHPUnit 6 - 7 编写不同的测试”这并不是真的,因为 PHPUnit 4.8 与 PHPUnit 5.6 一样具有相同的向前兼容层。简而言之:PHPUnit\Framework\TestCase 可以与 PHPUnit 4.8、PHPUnit 5.6、PHPUnit 6 和 PHPUnit 7 一起使用。- Sebastian Bergmann

请参阅 PHPUnit 4.8 更改日志,了解有关向前兼容性的详细信息。


1
我可以确认,如果您为最新的Phpunit版本编写测试,那么只需要进行一些微小的更改即可在旧版Phpunit上运行它们。在Travis上,可以进行变量降级,例如使用基于composer的安装程序,这里有一个示例:https://github.com/ktomk/pipelines/blob/master/.travis.yml#L28-L33 - 甚至可以回退到PHP 5.3:https://github.com/ktomk/pipelines/blob/master/bitbucket-pipelines.yml#L19-L27 - 它与少量更改非常有效:https://github.com/ktomk/pipelines/blob/master/tests/unit/UnitTestCase.php#L25-L41 - hakre

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