【问题标题】:Tests pass or fail depending on method of PHP Unit invocation测试通过或失败取决于 PHP 单元调用的方法
【发布时间】:2017-08-09 14:10:26
【问题描述】:

我在 PHP 单元测试套件中有大量测试。

运行完整套件时所有测试都会通过,但是单独运行时,某些测试可能会通过或失败,具体取决于我如何调用 PHP 单元:

$ php phpunit --configuration phpunit.xml --filter FooIntegrationTest

PHPUnit 5.7.19 by Sebastian Bergmann and contributors.

................                                                  16 / 16 (100%)

Time: 3.97 seconds, Memory: 109.50MB

OK (16 tests, 36 assertions)

对比

$ php phpunit --configuration phpunit.xml tests/Integration/FooIntegrationTest.php

PHPUnit 5.7.21 by Sebastian Bergmann and contributors.

..........F.F...                                                  16 / 16 (100%)

Time: 3.73 seconds, Memory: 111.75MB

FAILURES!
Tests: 16, Assertions: 36, Failures: 2.

有问题的失败是意外结果(即代码运行良好),没有 PHP 错误或异常。

大多数测试都会通过两种方式,并且产生上述结果的那些测试似乎没有什么特别之处。

【问题讨论】:

  • 我注意到的一件事是他们似乎运行了两个版本的 PHPUnit - 5.7.19 和 5.7.21。
  • 啊,是的,我在不同的 VM 中进行了测试,看看它是否可能是 PHP 单元版本问题。但是,无论版本如何,问题仍然存在。
  • 如果它们运行不同的版本,则可能存在其他差异(即不同的 phpunit.xml)或从不同的目录运行(这会影响路径等) .
  • 这些失败的测试有什么共同点吗? (文件访问,特定数据库访问)
  • 两个测试都针对本地 Elasticsearch 索引执行复杂查询。但是我有其他测试可以执行类似的查询而没有问题。

标签: php unit-testing phpunit


【解决方案1】:

已解决....来自无关测试类的命名空间冲突

phpunit ... FooIntegrationTest.php 只打开和运行指定的单个类文件

phpunit ... --filter FooIntegrationTest 将打开套件中的每个文件以查找匹配的测试;这会导致另一个文件中的全局命名空间函数导致错误传递。

经验教训:不要在单元测试类中声明全局命名空间函数!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2021-12-15
    • 2017-08-15
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多