在经历了数月的挫折之后,以及在以前的开发者的巫毒娃娃中插入针的时间之后,我决定最好尝试重构遗留代码。UnitTesting一个返回一个复杂数据集的类
我已经订购了Micheal Feather's book,我进入了Fowler's refactoring,我用DUnit做了一些示例项目。
所以,即使我不掌握这个主题,我觉得是时候采取行动,并将一些想法付诸实践。
我工作的代码中几乎有100%的商业逻辑被困在用户界面中,而且都是程序编程(有一些例外)。该应用程序开始如同快速&脏,并继续如此。
现在编写所有应用程序的测试对我而言是一个没有意义的任务,但我想尝试单元测试我需要重构的东西。
一个大的“TForm业务逻辑类”所做的一项复杂任务是读取数据库数据,进行一些计算并填充调度程序组件。我想删除阅读数据库数据和计算部分,并分配给一个新的类这个任务。当然,这是一种改进当前设计的方法,它不是从头开始的最佳方式,但我想这样做,因为这个新类返回的数据在其他方面也很有用,例如现在我有人要求发送调度程序数据的电子邮件通知。
所以为了避免大量的复制和粘贴操作,我需要新的类。
现在调度程序从一个巨大的数据集(大小和数量的字段)中填充,可能第一个重构步骤可能是从新类中获取数据集。但是,将来我最好使用一个新的类(比如TSchedulerData或其他一些不太需要调度器的名字)来管理数据,而不是有一个数据集,因为我可以有一个TSchedulerData对象。
由于重构发生在小步骤和测试需要更好地重构我有点困惑如何继续。
以下几点是我不明白:
1)如何测试一个复杂的数据集?我应该运行工作应用程序,将一个结果集保存到xml中,然后在使用包含该xml数据的TClientDataSet的地方编写测试?
2)我有多少要关心TSchedulerData?我的意思是我不是100%确定我会使用TSchedulerData,可能我会坚持使用数据集,无论如何,创建将在2周内丢弃的复杂测试对DUnitNewbee没有吸引力。无论如何,可能这是它的工作原理。我无法想象没有测试的情况下我会面对的错误数量。
最后说明:我知道有人认为从头开始重写是一个更好的选择,但这不是一个选项。 “该应用程序非常庞大,今天已售出,今天还需要新功能才能停止营业”。这就是我所知道的,无论如何,重构可以挽救我的生命并延长应用程序的生命。
好的,谢谢。我所担心的是编写测试需要花费很多时间,因为数据很复杂。文件转储很复杂,所以这是我第一次真正的单元测试尝试,我担心会失去一周的时间,并以不成功的测试结束。无论如何,我没有其他地方可以开始,我的意思是,我需要改变这个代码,所以我应该从这里开始。 – LaBracca 2010-10-19 09:27:35