【发布时间】:2010-03-31 10:26:48
【问题描述】:
前提
我知道编写代码以在运行测试时采取不同的行为是非常糟糕的做法,但我实际上可能遇到过可能需要这样做的场景。
具体来说,我正在尝试在 Zend 框架中测试一个非常具体的 HTML Purifier 包装器——确切地说,是一个 View Helper。 HTML Purifier 自动加载器是必要的,因为它使用的逻辑与我们原本拥有的自动加载器不同。
问题
require()-在我的 View Helper 类顶部使用自动加载器,在测试范围内为我提供了以下内容:
HTML Purifier 自动加载器注册器不兼容 由于 PHP 错误 #44144,使用非静态对象方法; 请不要使用 HTMLPurifier.autoload.php(或任何 包含此文件的文件);相反,放置代码: spl_autoload_register(array('HTMLPurifier_Bootstrap', 'autoload')) 在你自己的自动加载器之后。
将 require() 替换为 spl_autoload_register(array('HTMLPurifier_Bootstrap', 'autoload')) 意味着测试运行良好,但 View Helper 死于可怕的死亡声称:
Zend_Log[3707]:ErrorController 捕获 LogicException “传递的数组未指定现有的静态方法(未找到类 'HTMLPurifier_Bootstrap')”
(我们的测试文件夹结构必然与 Zend 文件夹结构略有不同。)
问题
在修改之后,我想我需要根据测试范围内的东西是否选择自动加载器加载。
在两种情况下,我是否有另一个选项来包含 HTMLPurifier 的自动加载例程,但由于隧道视野而我没有看到?
如果不是,我是否必须找到一种方法来使用我自己的代码(例如 APPLICATION_ENV)来区分测试环境和生产环境 - 或者 PHPUnit 是否通过设置一个常量来原生支持我的这个可怕的黑客我可以检查它是 defined() 还是类似的恶作剧? (我这里的 Google-fu 很弱!我可能只是做错了。)
【问题讨论】:
标签: php zend-framework phpunit autoload htmlpurifier