PHPUnit CodeIgniter 生成夹具 PHP 致命错误:找不到类“PHPUnit_Framework_TestCase”

Posted

技术标签:

【中文标题】PHPUnit CodeIgniter 生成夹具 PHP 致命错误:找不到类“PHPUnit_Framework_TestCase”【英文标题】:PHPUnit CodeIgniter Generate Fixtures PHP Fatal error: Class 'PHPUnit_Framework_TestCase' not found 【发布时间】:2014-06-11 15:15:37 【问题描述】:

所以安装了 phpUnit 和 CodeIgniter:

http://d.hatena.ne.jp/Kenji_s/20120117/1326763908

无法下载 PEAR,因为它已被弃用。所以只好下载phpunit phar文件:

http://phpunit.de/manual/4.0/en/installation.html#installation.phar

所以能够让一些测试正常运行。将我的 phpunit.phar 移动到 /usr/local/bin 并在测试目录上运行:

php /usr/local/bin/phpunit.phar

所有测试都运行正确。但是当我尝试运行 php generate 固定装置和 php generate.php 固定装置时:

PHP Fatal error:  Class 'PHPUnit_Framework_TestCase' not found in  /www/test/application/third_party/CIUnit/libraries/CIUnitTestCase.php on line 15

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /www/test/application/third_party/CIUnit/libraries/CIUnitTestCase.php on line 15

似乎它没有在 phar 文件中找到类,或者至少它们的顺序不正确?有趣的是,它可以很好地运行测试,但不能很好地运行生成装置。

此外,我还使用 composer 安装了 phpunit,所以我也安装了 /www/test/vendor/bin/phpunit。

任何帮助将不胜感激。

【问题讨论】:

生成fixutures的程序实际上并没有验证它使用的依赖项是否可用——因为它是用PHP编写的,你会看到关于它的致命错误。在您的情况下,这些依赖项不可用(尽管您的系统上有它们),因此您需要联系该软件产品的供应商并寻找您的支持选项,您可以在其中配置 phpunit 的路径。 【参考方案1】:

虽然我没有使用 CodeIgniter,但我的代码也遇到了同样的问题。尝试运行测试将导致错误消息:

找不到类“PHPUnit_Framework_TestCase”

为了解决这个问题,我通过在测试类声明中添加反斜杠来解决这个问题。

// Before
namespace IMAVendor\Super\Duper;

class MyClassTest extends PHPUnit_Framework_TestCase

// After
namespace IMAVendor\Super\Duper;

class MyClassTest extends \PHPUnit_Framework_TestCase
                          ^
                Added this backslash here

这似乎与命名空间和 phpunit 中内置的自动加载器有关。我有自己的项目代码自动加载器,它似乎试图从我的代码中加载 phpunit 的类。我不确定为什么当它无法在项目命名空间中找到它时,它没有尝试从“基础”加载它(这很可能是由于我自己的自动加载器出现故障)。

我知道这是一个老问题,但我将把它留在这里,以防它可能对某个地方的人有所帮助。

【讨论】:

以上是关于PHPUnit CodeIgniter 生成夹具 PHP 致命错误:找不到类“PHPUnit_Framework_TestCase”的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu中带有codeigniter3的phpunit

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

在非 Codeigniter 类中加载和使用 Codeigniter 模型

初始数据夹具中的用户

Django 不会为某些测试用例重新加载夹具

如何用PHPUnit生成代码覆盖率报告