为什么在phpunit测试中没有加载命名空间自动加载类?

Bij*_*lle 3 php phpunit namespaces autoload

为了赞美phpunit,autoload和namespace之间现有的大杂烩安排是这样的:

我创建了一个运行PhpUnit测试并使用命名空间自动加载的简单测试项目.我在bootstrap文件中注册自动加载,如下所示:

set_include_path(get_include_path() . PATH_SEPARATOR . "/path/to/classes/folder");
spl_autoload_register();
Run Code Online (Sandbox Code Playgroud)

在单元测试中,我加载并测试我的类,如下所示:

$obj = new \some\space\someClass(); // which is in the classes/some/space folder
$this->assertTrue($obj->foo()=='bar');
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

致命错误:在testSomeClass.php中找不到类'\ some\space\someClass'...

edo*_*ian 7

虽然这不是特定于phpunit的,但您需要更改:

spl_autoload_register();
Run Code Online (Sandbox Code Playgroud)

spl_autoload_register('spl_autoload');
Run Code Online (Sandbox Code Playgroud)

注册自动装带器的任何其他组件都会取消注册默认值__autoload().

如果您的代码具有现有的__autoload函数,则必须在__autoload堆栈上显式注册此函数.这是因为spl_autoload_register()将通过spl_autoload()或spl_autoload_call()有效地替换__autoload函数的引擎缓存.

所以这就是spl-autoload与使用自动加载的其他任何东西一起工作的方式.

  • 根据[`spl_autoload_register()`](http://us3.php.net/manual/en/function.spl-autoload-register.php)的文档"如果没有提供参数,则默认实现` spl_autoload()`将被注册." 没有参数应该等同于传递''spl_autoload'并且上述更改应该没有效果!真棒.:) (6认同)