【问题标题】:Codeception\Test\Test::run(?\Framework\TestResult $result = NULL) must be compatible withCodeception\Test\Test::run(?\Framework\TestResult $result = NULL) 必须兼容
【发布时间】:2019-11-11 12:49:24
【问题描述】:

PHP v7.2.3
PHP 单元 8.2.3
Codeception 3.0.2

当我尝试运行测试时,出现以下错误:

声明 Codeception\Test\Test::run(?PHPUnit\Framework\TestResult $result = NULL) 必须兼容 PHPUnit\Framework\Test::run(?PHPUnit\Framework\TestResult $result = NULL): PHPUnit\Framework\TestResult 在 /var/com/vendor/codeception/codeception/src/Codeception/Test/Test.php 第 18 行

当我查看 PHPUnit\Framework\Test::run 的定义时,我看到它指定了返回类型,但 Codeception\Test\Test::run 没有,这似乎是问题所在。

我在各自的 git 存储库中检查了这两个文件的版本历史记录,似乎这些文件在许多版本中都是这样的。

经过大量搜索,似乎没有其他人发布过这个问题,这让我觉得我错过了一些关键的见解。

任何关于这个问题的见解将不胜感激,谢谢!

【问题讨论】:

  • PHP 错误消息(您的问题已确认)表明 Codeception 3.0.2 与 PHP Unit 8.2.3 不兼容。我不太喜欢它,但第一个猜测是 Codeception - 即使它有 Phpunit 作为依赖项 - 也没有为 Phpunit 做足够的版本固定(不是说 Codeception 不好,我想它是一个很好的工具, 版本固定通常并不经常关注,因为版本实际上为预期和确认的稳定版本确定了版本)。请随时发表评论。
  • @hakre 是的,这就是我最初的想法 - 所以我检查了版本历史记录,从 phpunit 7 开始为 run 函数指定返回类型,6.5.14 是最后一个没有的版本。但是,这篇文章让我相信 v3 的 codeception 支持 phpunit 7 以上codeception.com/04-24-2019/codeception-3.0.html
  • @Naktibalda 我看到您的测试在最新版本中通过,感谢您的链接,但您能否解释一下这两个函数如何具有不同的返回类型定义并且仍然有效。这将有助于故障排除。谢谢
  • 票据更新:当项目依赖于另一个试图与 PHPUnit 的多个主要版本兼容的库时,会发生这种情况。

标签: phpunit php-7 codeception


【解决方案1】:

最后,全新安装的 Symfony 最新版本和 Codeception 提供了一个可行的解决方案。

由于这最初是来自另一个 symfony 3 应用程序的端口(使用旧版本的 codeception),因此很可能存在错误配置或不兼容的包。

我后来想到的另一个可能的原因是以前版本的 symfony 中用于代码接收的 cli 是从通用 bin 目录“bin/codecept”运行的,现在我们直接从“vendor/bin/codecept”运行它可能我的 CI 脚本引用了一个过时的 cli。

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 2012-08-16
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多