使用 PHPUnit 测试时不考虑 __autoload
如何让 PHPUnit 尊重 __autoload 函数?
例如,我有以下三个文件:
loader.php
function __autoload($name)
{
echo "foo\n";
require_once("$name.php");
}
test.php
require_once("loader.php");
class FooTest extends PHPUnit_Framework_TestCase
{
function testFoo()
{
new Foo();
}
}
foo.php
require_once("loader.php");
new Foo();
正如预期的 php foo.php
错误一样,说文件“Foo.php”没有 存在。然而,testFoo()
函数会出错,提示有 没有像 Foo
这样的类,并且从不回显“foo\n”行。
How can I make PHPUnit respect __autoload functions?
For example, I have these three files:
loader.php
function __autoload($name)
{
echo "foo\n";
require_once("$name.php");
}
test.php
require_once("loader.php");
class FooTest extends PHPUnit_Framework_TestCase
{
function testFoo()
{
new Foo();
}
}
foo.php
require_once("loader.php");
new Foo();
As expected php foo.php
errors out, saying that file "Foo.php" doesn't
exist. The testFoo()
function however errors out by saying that there is
no such class as Foo
, and never echos the "foo\n" line.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是预期的行为。
请参阅此 PHPUnit bugtracker 条目:
升级到 3.5.10 损坏了“自动加载”功能
从 PHPUnit 3.5 开始:
快速修复:
唯一需要的更改是在引导脚本中添加
spl_autoload_register('__autoload')
。更长的修复:
如果可以的话,我建议你一起摆脱
__autoload
并使用spl_autoload_register
在您的应用程序中,因为这是使用 PHP 5 代码的方式。 (如果你只有一个自动加载器,则无法使用框架的自动加载器等等)This is expected behavior.
See this PHPUnit bugtracker entry:
Upgrading to 3.5.10 has broken function of "autoload"
As of PHPUnit 3.5:
Quick fix:
The only change required is to add
spl_autoload_register('__autoload')
in your bootstrap script.Longer fix:
If you can I'd suggest you just get rid of
__autoload
all together and usespl_autoload_register
in your application as it is the way to go with PHP 5 code. (If you only have one autoloader you can't use the autoloader of your framework and so on)尝试使用
spl_autoload_register
代替__autoload
。spl_autoload_register
允许多个自动加载器一起工作而不会互相干扰。Try using
spl_autoload_register
instead of__autoload
.spl_autoload_register
allows for multipe autoloaders to work together without clobbering each other.PHPUnit 使用 spl_autoload_register 来关闭 __autoload。
PHPUnit uses spl_autoload_register which turns off __autoload.