使用 PHPUnit 测试时不考虑 __autoload

发布于 2024-11-19 02:07:30 字数 585 浏览 1 评论 0原文

如何让 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

待天淡蓝洁白时 2024-11-26 02:07:30

这是预期的行为。

请参阅此 PHPUnit bugtracker 条目:升级到 3.5.10 损坏了“自动加载”功能

从 PHPUnit 3.5 开始:

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

快速修复:

唯一需要的更改是在引导脚本中添加 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:

PHPUnit now uses an autoloader to load its classes. If the tested code requires an autoloader, use spl_autoload_register() to register it.

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 use spl_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)

回梦 2024-11-26 02:07:30

尝试使用 spl_autoload_register 代替__autoloadspl_autoload_register 允许多个自动加载器一起工作而不会互相干扰。

Try using spl_autoload_register instead of __autoload. spl_autoload_register allows for multipe autoloaders to work together without clobbering each other.

段念尘 2024-11-26 02:07:30

PHPUnit 使用 spl_autoload_register 来关闭 __autoload。

PHPUnit uses spl_autoload_register which turns off __autoload.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文