【问题标题】:Included class inside a PHPUnit file can't use Autoloader?PHPUnit 文件中包含的类不能使用 Autoloader?
【发布时间】:2014-03-27 15:30:17
【问题描述】:

我写了一个router.test.php 文件:

class RouterTest extends PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        require_once '../router.class.php';
    }


    public function testUnit()
    {
        $this->assertEquals(true, true);
    }
}

... 用于简单测试我的 PHPUnit 库是否正常工作。但是,当我在控制台中输入 phpunit router.test.php 时,我会收到以下错误消息:Fatal error: Trait 'Core' not found in C:\xampp\htdocs\_Framework\ver_3\libraries\router\router.class.php on line 23

...我的 Router 类工作正常,我的 Autoloader 自动在我的 Router 类中包含 trait(名为 Core)。

问题出在哪里?

我的 Autoloader 注册方法如下:

public static function register()
{
    return spl_autoload_register(
        __CLASS__ . '::load'
    );
}

...我在 index.php 文件中使用此方法,我应该为 PHPUnits 编写另一个自动加载器吗?


我在 setUp 方法中包含了必要的文件,现在这个类看起来像这样:

<?php
use Framework\Libraries\Configuration\Configuration;
use Framework\Libraries\Autoload\Autoloader;



class RouterTest extends PHPUnit_Framework_TestCase
{
    public function setUp()
    {
        require '../../core.trait.php';
        require '../../configuration/configuration.class.php';
        require '../../autoload/autoloader.class.php';

        Configuration::set('files', [
            require '../../../configuration/framework.configuration.php',
            require '../../../configuration/autoloader.configuration.php',
            require '../../../configuration/router.configuration.php',
        ]);

        Autoloader::set('prefixes', ['Framework']);
        Autoloader::set('extensions', ['.class.php', '.trait.php']);
        Autoloader::register();

        require_once '../router.class.php';
    }

    public function testUnit()
    {
        $this->assertEquals(true, true);
    }
}

... 我收到一条新的错误消息:E Time: 109 ms, Memory: 1.75Mb There was 1 error,但我无法收到错误消息。我认为这是因为 Autoloader 无法加载文件,因为路径错误。

【问题讨论】:

  • 你也需要在这个类中包含你的自动加载器类。 include_once('AutoLoader.php'); 或者您可以为 phpunit 创建 bootstrap.php 文件并将所有需要的类包含在该文件中。
  • @Rikesh 谢谢你,它似乎有效。您可以发布回复,以便我批准。

标签: php unit-testing phpunit autoload


【解决方案1】:

不,它不会自动加载索引文件。因此,您需要通过添加include_once('AutoLoader.php'); 将所有相关类包含在单元测试类中,或者另一种方法是创建一个bootstrap.php 文件并在所有PHPUnit 测试类中包含您需要的所有类。

Reference.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    相关资源
    最近更新 更多