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