【问题标题】:Fatal error: Class 'CDbTestCase' not found致命错误:找不到类“CDbTestCase”
【发布时间】:2015-08-16 12:37:21
【问题描述】:

我是 php 新手,我必须对应用程序进行测试。我正在尝试进行单元测试,但显示错误消息。我有很多周前,我无法修复它,请帮助我!

消息显示:致命错误:未找到“CDbTestCase”类。

我阅读并关注了许多关于此问题的教程,但它不起作用。

我正在使用 Yii、Eclipse IDE 和 Composer。

我认为问题出在 bootstrap.php 但我不使用它,因为我正在使用 composer,这是 composer.json

{
    "require-dev": {
        "yiisoft/yii": "1.1.*",
        "phpunit/phpunit": "4.6.*",
        "phpunit/phpunit-selenium": ">=1.2",
        "codeception/codeception":"*",
        "phpunit/dbunit": ">=1.2"
    },

    "autoload": {
        "psr-0": {"": "vendor/autoload.php"},
        "psr-4": {"": "/../framework/test/CDbTestCase.php"}
    }
}

【问题讨论】:

  • 你能把代码放在出错的地方吗?
  • 它只是说明您正在尝试创建CDbTestCase 的对象,但没有在您的代码中定义具有此名称的类。谢谢。
  • 没有看到我无法确定的错误,但也许这个答案会有所帮助? stackoverflow.com/questions/12760644/…
  • 我已经检查了上面的问题,但它不起作用。我班级的标题是:class Impresora extends CActiveRecord 并且错误在测试用例标题中:class ImpresoraTest extends CDbTestCase

标签: php yii phpunit composer-php


【解决方案1】:

您的 Composer 自动加载完全错误。

  1. 不要在您自己的composer.json 的自动加载中包含作曲家自动加载器“vendor/autoload.php”。只有一个自动加载器,它是使用您的自动加载数据以及任何库创建的。
  2. PSR-4 自动加载也是错误的。您必须根据 PSR-4 声明将类放入文件的目录。您指向一个文件。
  3. 您不使用 PSR-0 和 PSR-4 的类前缀。这对性能不利,因为您声明任何类都可能在目录中。所以 Composer 也必须在这个目录中搜索那个类,即使是那些保证不存在的类。始终使用前缀,并使其尽可能长以允许唯一匹配:一个前缀应该只指向一个目录结构。

您应该解释为什么在测试中不使用引导文件。 PHPUnit 所需的最小引导代码是包含 Composer 自动加载器。此外,您应该添加测试中需要且必须一次性完成的内容,例如框架组件的初始化 -YMMV。

【讨论】:

  • 现在我必须用我的想象力来猜测你的代码是什么——或者我可以要求你提供一个代码示例,简化为仅演示问题。
【解决方案2】:

加载 yii 框架需要引导文件。 CDbTestCase 是 yii 框架的一部分,因此如果您的测试依赖于 yii 的单元测试相关类,则未包含 yii 会出现此错误。

使用包含的引导文件并确保您还包含 composer 的 autoload.php 文件。我通常将它添加到我的 yii 配置文件中(我相信默认情况下,yii 使用 test.php 配置文件进行自定义测试相关设置。您可以在此文件中包含 autoload.php)

在你的 yii 配置文件顶部的某个地方

// Include composer autoload
require_once 'path/to/composer/vendor/autoload.php';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 2014-10-03
    • 1970-01-01
    • 2011-09-08
    • 2011-12-17
    • 2018-12-21
    • 2012-11-21
    • 2015-03-20
    相关资源
    最近更新 更多