【发布时间】:2011-04-08 00:10:22
【问题描述】:
我的任务是对一个大约 1600 行长并通过 cron 每分钟运行一次的 PHP 脚本进行系统测试。该脚本是 100% 程序化的,从 30 多个 require_once() 调用开始,这些调用引入了整个代码库。系统从一开始就是这样设计的。
有人告诉我,重构不是一种选择,因为目前没有测试用例。
问题:
我在脚本中间遇到了一个“新”类构造函数。此类构造函数在不同的类中创建工厂。我不关心类构造函数或工厂。有没有办法绕过功能而不必模拟、存根等?
问题:
- 脚本开头的 require() 阻止我创建存根,因为我不能有两个同名的函数。 (实函数和存根函数)
- 'new' 位于脚本中间,因此我无法向创建的对象添加模拟。
【问题讨论】:
-
伙计,这听起来很像我在工作中必须处理的代码。我不会将此作为答案发布,因为它没有效率,但我会说:暂时忘记 unit 测试。您可以对脚本执行自动化的集成测试,并在重构时慢慢构建一个unit套件。当然,集成测试更麻烦也更难(尤其是伪造数据来执行诸如强制错误状态之类的事情以获得更好的代码覆盖率),但这将是一个更可实现的短期目标,至少它会给你一些各种测试能力。
-
亲爱的! Michael Feathers 写了Working Effectively With Legacy Code,其中列出了在这种紧迫的不存在测试的情况下使用的技术。他使用的示例不是 PHP,但技术和对它们的讨论非常有用。推荐阅读。查看亚马逊评论,这些评论描绘了这本书的内容。
标签: php unit-testing testing system