使用PHPUnit进行测试时,__ autoload不受尊重

Mas*_*sse 11 php phpunit autoload

如何使PHPUnit尊重__autoload函数?

例如,我有这三个文件:

loader.php

function __autoload($name)
{
    echo "foo\n";
    require_once("$name.php");
}
Run Code Online (Sandbox Code Playgroud)

test.php的

require_once("loader.php");

class FooTest extends PHPUnit_Framework_TestCase
{
    function testFoo()
    {
        new Foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

foo.php

require_once("loader.php");
new Foo();
Run Code Online (Sandbox Code Playgroud)

正如预期的php foo.php错误,说文件"Foo.php"不存在.testFoo()然而,该函数通过说没有这样的类来错误Foo,并且从不回声"foo \n"行.

edo*_*ian 23

这是预期的行为.

看到这个PHPUnit bugtracker条目: Upgrading to 3.5.10 has broken function of "autoload"

从PHPUnit 3.5开始:

PHPUnit现在使用自动加载器来加载它的类.如果测试的代码需要自动加载器,请使用spl_autoload_register()进行注册.

快速解决:

唯一需要的更改是添加spl_autoload_register('__autoload')引导脚本.

更长的修复:

如果你能建议你只是将__autoload所有内容放在一起并spl_autoload_register在你的应用程序中使用,因为这是使用PHP 5代码的方法.(如果您只有一个自动加载器,则无法使用框架的自动加载器,依此类推)