2015-01-20 69 views
0

重構過程中編寫測試以改進設計我打算開始使用TDD。我已閱讀了RED-GREEN-Refactor週期的工作原理。在編寫測試代碼之前,我很好,並將它從紅色變爲綠色。儘管我有一個關於重構因素的基本問題:例如:在進行重構時,在改進設計的同時,假設我介紹了引入工廠模式的好例子,並將其添加到代碼中。我的測試可能會轉到RED,我試圖修復這個新的改進。 但是在哪裏我要爲在重新分解期間添加的這個新的工廠類編寫測試?還是應該像現在 我第一次寫工廠類測試 - >紅 加入工廠類 - 讓測試GREEN 重因子該工廠類 修正了RED何時在TDD

其他測試我做在想什麼了嗎?

回答

1

如果重構或設計改進需要更改被測代碼的外部行爲或添加新行爲,那麼它不適用於TDD週期的重構階段。

通過爲工廠編寫測試可以開始一個新的循環。工廠完成後,工廠可以在不同的TDD循環中引入被測代碼。

3

如果你嚴格遵循經典的紅綠重構循環,你永遠不應該有沒有被測試覆蓋的生產代碼。您的單元測試應該只驗證您的系統在測試中通過其公共API的行爲,並遠離實現細節。

「走向綠色」階段的目標是儘可能快地變綠。只要你在這一步變綠,你所做的任何骯髒的黑客都是可以原諒的。

在重構階段,您可以(也應該)清理您的代碼。如果這意味着引入一個新班級來梳理那些並不屬於最初班級的獨立行爲,那麼一定要去做。這些更改都是「安全的」,因爲您使用單元測試覆蓋了原始代碼。因爲重構不應該改變你的代碼的行爲,所以吧應該保持綠色。

你應該爲這個新提取的類編寫新的單元測試嗎?不是真的,因爲它目前是測試系統的一部分,並且包含在您的原始單元測試中。

注意:還有其他樣式的單元測試有利於嚴重測試每個類,因此依賴於您的TDD樣式,您的里程可能會有所不同。

回到你的例子:你正在引入一個工廠類。你在哪裏使用這家工廠?該代碼是否覆蓋了測試(再次,如果您嚴格遵循紅綠重構循環,它應該)?如果是這樣的話,你不應該爲工廠編寫新的單元測試,因爲它正在被間接測試,並且可以被看作是「實現細節」。

+0

謝謝,讓我知道如果我正確地得到它:一旦你重新分解代碼來介紹一個工廠,**工廠**消費者**必須更新和消費者測試應該修復使用這個新工廠。我到了這裏。但是接下來你提到_你不必爲工廠編寫新的單元測試,因爲它正在被間接測試,並且可以被看作是「實現細節」_這是否意味着我們可以忽略僅用於代碼的測試提高代碼和設計的質量,而不涉及功能和非功能需求? – PKV 2015-01-23 16:41:43

+0

你能否用一個小代碼例子來澄清你的問題?你究竟是什麼意思的工廠?工廠方法還是抽象工廠?如果你說測試是「紅色」,你的意思是他們突然開始失敗,或者測試因爲突變而不能編譯? – prgmtc 2015-01-23 20:57:02