【问题标题】:phpUnit failing with weird errorphpUnit 因奇怪的错误而失败
【发布时间】:2012-07-13 00:45:08
【问题描述】:
PHP Fatal error:  Default value for parameters with a class type hint can only be NULL in /usr/share/php/PHPUnit/Framework/Test.php on line 66
PHP Stack trace:
PHP   1. {main}() /usr/bin/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:46
PHP   3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:130
PHP   4. PHPUnit_Runner_BaseTestRunner->getTest() /usr/share/php/PHPUnit/TextUI/Command.php:150
PHP   5. PHPUnit_Runner_BaseTestRunner->loadSuiteClass() /usr/share/php/PHPUnit/Runner/BaseTestRunner.php:104
PHP   6. PHPUnit_Runner_StandardTestSuiteLoader->load() /usr/share/php/PHPUnit/Runner/BaseTestRunner.php:168
PHP   7. PHPUnit_Util_Fileloader::checkAndLoad() /usr/share/php/PHPUnit/Runner/StandardTestSuiteLoader.php:78
PHP   8. PHPUnit_Util_Fileloader::load() /usr/share/php/PHPUnit/Util/Fileloader.php:79
PHP   9. include_once() /usr/share/php/PHPUnit/Util/Fileloader.php:95
PHP  10. phpunit_autoload() /usr/share/php/PHPUnit/Autoload.php:0
PHP  11. require() /usr/share/php/PHPUnit/Autoload.php:203
PHP  12. phpunit_autoload() /usr/share/php/PHPUnit/Autoload.php:0

有问题的行有:

public function run(PHPUnit_Framework_TestResult $result = NULL)

当我删除 = NULL 时,它通过但在另一行也有 = NULL 时失败,搞砸的事情是错误基本上说它必须为 NULL,它是。

我没有以任何方式修改过 PhpUnit,我使用这里描述的方法安装它:

http://www.giocc.com/installing-phpunit-on-ubuntu-11-04-natty-narwhal.html

老实说,我不明白为什么会发生这种情况.. 有些事情告诉我 PHP 存在错误,它给了我错误的错误。

【问题讨论】:

  • 您最近更新了您的 PHP 吗?您正在运行什么版本和操作系统?我同意它看起来像 PHP 坏了。这些线条很好。
  • 我认为 PHP 最近没有更新,唯一的变化是我从 PhpUnit 3.6.3 更新到最新版本。我在 Ubuntu 11.10/. 上有 PHP 版本 5.3.6
  • 去掉默认值后,在后续的NULL上失败时,这种情况下的错误信息是什么?
  • PHP 对NULLnull 的不同处理表明您的PHP 安装存在严重问题。
  • 哦,该死的,我发现了问题所在,而这对我来说是一个愚蠢的问题。我有一个常量文件,它定义了 NULL 以在 ORM 库中使用。它是在它自己的命名空间中定义的,所以它不应该干扰全局常量,但我猜常量对于命名空间来说有点棘手..

标签: php phpunit


【解决方案1】:

找到答案,从 cmets 部分引用我自己的话:

哦,该死的,我发现了问题所在,而这对我来说是一个愚蠢的问题。我有一个常量文件,它定义了 NULL 以在 ORM 库中使用。它是在它自己的命名空间中定义的,所以它不应该干扰全局常量,但我猜常量对于命名空间来说有点棘手..

所以TIL,如果你想在命名空间中定义常量,仅仅将命名空间添加到文件顶部是不够的,你必须像这样定义常量

define('NAMESPACE\CONSTANT',        'value');
// or
define(__NAMESPACE__ . '\CONSTANT', 'value'); // to use the current namespace

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    • 2013-10-29
    • 2018-05-31
    • 2015-03-27
    • 2012-11-21
    • 2012-12-25
    相关资源
    最近更新 更多