PHPUnit 丢失类名(ReflectionClass 类不存在错误)

Posted

技术标签:

【中文标题】PHPUnit 丢失类名(ReflectionClass 类不存在错误)【英文标题】:PHPUnit losing class name (ReflectionClass class does not exist error) 【发布时间】:2013-06-20 23:14:09 【问题描述】:

我正在尝试让 phpUnit 工作;我以前没用过。如果我在 CLI 中运行 phpunit,它可以工作,但通过脚本(这是我正在寻找的)它不会。这是我得到的输出(注意 Class 后面的两个空格):

Fatal error:  Uncaught exception 'ReflectionException' with message 'Class  does not exist' in /usr/local/share/pear/PHPUnit/Util/Test.php:295
Stack trace:
#0 /usr/local/share/pear/PHPUnit/Util/Test.php(295): ReflectionClass->__construct('')
#1 /usr/local/share/pear/PHPUnit/Util/Test.php(576): PHPUnit_Util_Test::parseTestMethodAnnotations(false, false)
#2 /usr/local/share/pear/PHPUnit/Util/Test.php(350): PHPUnit_Util_Test::getBooleanAnnotationSetting(false, false, 'backupGlobals')
#3 /usr/local/share/pear/PHPUnit/Framework/TestSuite.php(458): PHPUnit_Util_Test::getBackupSettings(false, false)
#4 /usr/local/share/pear/PHPUnit/Framework/TestSuite.php(834): PHPUnit_Framework_TestSuite::createTest(Object(ReflectionClass), false)
#5 /usr/local/share/pear/PHPUnit/Framework/TestSuite.php(212): PHPUnit_Framework_TestSuite->addTestMethod(Object(ReflectionClass), Object(ReflectionMethod))
#6 /usr/local/share/pear/PHPUnit/Framework/TestSuite.php(315): PHPUnit_Framework_TestSuite->__construct(Object(ReflectionClass))
#7 /var/www/www.s in /usr/local/share/pear/PHPUnit/Util/Test.php on line 295

addTestMethod 中的类名似乎丢失了。这是我的代码:

<?php
require_once 'PHPUnit/Autoload.php';

class MyTestCase extends PHPUnit_Framework_TestCase 
    public function testSubtraction() 
        $this->assertEquals(2 - 2, 0);
    
    public function testAddition() 
        $this->assertEquals(2 + 2, 4);
    

$c = new MyTestCase();

$suite = new PHPUnit_Framework_TestSuite();
$suite->addTestSuite('MyTestCase');
PHPUnit_TextUI_TestRunner::run($suite);

我是不是设置错了?

以下是版本:

Installed packages, channel pear.phpunit.de:
============================================
Package            Version State
File_Iterator      1.3.3   stable
PHPUnit            3.7.21  stable
PHPUnit_MockObject 1.2.3   stable
PHP_CodeCoverage   1.2.11  stable
PHP_Timer          1.0.4   stable
PHP_TokenStream    1.1.5   stable
Text_Template      1.1.4   stable

PHP 5.4

反射确实有效,我在自己的脚本中使用它。希望这与我的设置有关,我真的不想修改 PHPUnit...当然它可以在其他地方工作。

【问题讨论】:

你有没有解决这个问题? 【参考方案1】:

出了点问题:

'Class  does not exist'
       ^
       `- normally the classname is given here

如您所见,您的错误消息要么缺少某些内容,要么 PHPUnit 试图无中生有地创建一个测试用例。检查您的测试文件夹中是否有一些多余/不完整的文件。或者类似的东西。这只是基于错误消息的猜测,如果我是你,我会在调试会话中解决这个问题,以实际找出发生了什么。这包括删除-调试测试会话和单步调试并可能将调试代码添加到 phpunit 安装中。小心和备份。

【讨论】:

以上是关于PHPUnit 丢失类名(ReflectionClass 类不存在错误)的主要内容,如果未能解决你的问题,请参考以下文章

PhpStorm:不推荐使用类名调用

未找到但正确包含 PHPUnit 类

Phpunit测试发出警告没有在课堂上发现的测试

PHPUnit:从setUp()获取测试类和方法的名称?

使用匿名函数进行PHPUnit测试

在 catch 块中设置对象属性时 PHPUnit 测试失败