首页 > 解决方案 > 从 3.6.6 升级到 3.7.5 后 PHPUnit 测试断言不同

问题描述

几天前,我将我的应用程序从 3.6.6 升级到了 3.7.5。在进行升级之前,我运行了所有测试,结果如下:

// 环境
CakePHP 版本:3.6.6
PHPUnit 版本:6.5.14

// 结果
测试:476,断言:1927

// Sublime Text 3 find with $this->assert
1038 $this->assert's found。
因此:1038 $this->assert found 和 1927 断言结果。

// 控制器测试

use Cake\TestSuite\IntegrationTestCase;

class UsersControllerTest extends IntegrationTestCase
{

==================================================== =====================

我用 composer self-update && composer create-project --prefer-dist cakephp/app app_name 创建了一个新项目。我复制了所有文件并实施了迁移指南中记录的更改。

我登录并且一切正常(除了中间件 csrf 令牌不匹配错误,但那是另一个问题。)

我再次进行了测试,并提供了以下结果。

// 环境
CakePHP 版本:3.7.5
PHPUnit 版本:6.5.8

// 结果
测试:497,断言:1135

// Sublime Text 3 find with $this->assert
1059 $this->assert's found。
因此:1059 $this->assert found 和 1135 断言结果。

// 控制器测试

use Cake\TestSuite\TestCase;
use Cake\TestSuite\IntegrationTestTrait;

class UsersControllerTest extends TestCase
{
    use IntegrationTestTrait;

==================================================== =====================

我已经仔细检查过我准确地复制了所有内容,除了理解测试结果之外,一切都应该如此。

我还使用 Sublime Text 3 来检查升级后我没有再调用 $this->assert 792 次,但这证实了考虑到我又做了 21 次测试,它被调用的次数是正确的。

我能看到的唯一区别是:

  1. 在 3.6.6 中使用了 IntegrationTestCase。
  2. 在 3.6.6 中使用 PHPUnit 版本:6.5.14。

  3. 在 3.7.5 中使用了 TestCase 和 IntegrationTestTrait。

  4. 在 3.7.5 中使用 PHPUnit 版本:6.5.8。

==================================================== =====================

// 问题:

我希望有人能帮助我理解为什么我可以多做 21 次测试但少了 792 次断言?是使用 TestCase 和 IntegrationTestTrait 而不是 IntegrationTestCase 还是 PHPUnit 版本差异或其他什么?

谢谢。Z。

==================================================== =====================

@ndm,感谢您的输入。

我想听从你的建议,但情况发生了变化。我今天早上起床并试图复制昨天的结果。我的新 3.7.5 应用程序测试结果相同:

// 环境
CakePHP 版本:3.7.5
PHPUnit 版本:6.5.8

// 结果
测试:497,断言:1135

然后我加载了旧的 3.6.6 应用程序并再次运行测试,但 PHPUnit 版本发生了变化,结果如下:

// 环境
CakePHP 版本:3.6.6
PHPUnit 版本:6.5.8

// 结果
测试:497,断言:1135

我以为我昨天犯了一个错误并复制了错误的文件夹,所以我取出了没有被触及的主备份(一直回到 19/01/19)。我在 CakePHP 3.6.6 版上加载了 4 个备份。他们都显示了这些结果。

// 环境
CakePHP 版本:3.6.6
PHPUnit 版本:6.5.8

// 结果
测试:497,断言:1135

所以现在我想知道 PHPUnit 6.5.14 到底在哪里?

自 2019 年 1 月 19 日以来,我已经在我的 CakePHP 3.6.6 应用程序上运行了大约 50 次测试,当你运行测试时,cmd 行总是显示 PHPUnit 版本,所以我知道我使用的是 PHPUnit 6.5.14。

现在我想知道什么可以解释这一点?这也意味着我无法复制昨天的结果。

您的建议让我放心,即:它可能是很多不同的事情。此外,我需要权衡我将原因隔离出来所花费的时间与知道原因的好处。

目前,我决定将此问题放在我的待办事项列表中,因为它仍然运行所有测试,并且可能就像您提到的那样“也许 CakePHP 提供的一些断言方法发生了变化,因此它们在内部减少了对 PHPUnit 的调用断言方法。也许 PHPUnit 在早期版本中并没有错误地计算事物。也许完全不同,可能有很多原因“而且要弄清楚到底需要多少时间。

希望在接下来的几个月内,我可以腾出一些时间来研究它,但目前我已经将它归档在“Sherlock Holmes 和缺少 PHPUnit 版本的案例”下。:)

再次感谢,Z。

标签: cakephpcakephp-3.0phpunit

解决方案


推荐阅读