在經歷了數月的挫折之後,以及在以前的開發者的巫毒娃娃中插入針的時間之後,我決定最好嘗試重構遺留代碼。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