【问题标题】:PHP System Test - 1600 line procedural scriptPHP 系统测试 - 1600 行程序脚本
【发布时间】: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


【解决方案1】:

并不真正了解您的整个问题,但阅读您问题的最后一部分,关于存根函数和类似物,也许您应该了解更多关于 如何 动态 php 可以。

例如:

http://php.net/manual/en/function.rename-function.php

所以基本上你可以重命名你想要存根的函数,并创建一个具有相同名称的新函数,如果你愿意,可以从新函数中用它的新名称调用旧函数。

有很多用于操作类、函数等的东西,其中一些以扩展的形式存在,而且非常hacky(尤其是整个扩展http://www.php.net/manual/en/book.runkit.php),但出于测试目的,为什么不呢? ?

【讨论】:

  • 我相信您必须安装 APD 扩展才能获得该功能。
猜你喜欢
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多