【发布时间】:2011-05-12 07:20:47
【问题描述】:
我正在编写一个小应用程序,其唯一目的是获得更好的 OOP/可测试代码习惯。并且喜欢它,顺便说一句!
我正在努力吸收开发“可测试代码”背后的方法,主要是通过阅读 Sebastien Bergmann、Misko Hevery 和 Giorgio Sironi 等单元测试传播者的帖子。
我吸收的困难之一是滥用静态方法,依赖对象的对象依赖对象。目前,我被困在全球范围内的常数上。在我的应用程序开始时,我加载了一个 CONSTANT,它只是在调试或生产中设置应用程序模式:
/**
* APP_MODE values:
*
* PROD Production, no errors displayed email sent on error, logs to
* logs/app-<date-time>.log.
*
* DEBUG: All warnings and errors displayed, emails disabled and log messages
* sent to console. Whether in-memory modifications to configuration
* data are allowed
*/
define("APPMODE", "DEBUG");
如何根据此常量的状态测试应用程序类以进行正确的错误处理?
起初我的想法是简单地将全局常量移动到类常量,而不是在我的 init 类中,这样就解决了这个特定类的情况,但我对这个过程并不满意。我的意思是,是否应该简单地避免在一个可能值always 的严格意义上不是“真正”常量的站点范围常量?
我无法想象测试人员必须为每个类编写 2 个测试套件,即 initClassDebugTest.php 和 initClassProdTest.php,除非 phpUnit 可以以某种方式重置全局状态?是否应该避免以这种方式使用全局常量?我有一种奇怪的直觉,我根本不应该在这里使用常量。我很想知道那里的测试精明编码器将如何在运行时处理具有 2 个可能值的全局定义。
【问题讨论】:
标签: php unit-testing phpunit