簡體   English   中英

遷移遺留代碼時進行單元測試

[英]Unit testing while migrating legacy code

我們有一個舊的C#庫需要“清理”,重構,基本上重做。 該庫沒有任何關聯的單元測試(並且沒有相關的文檔)。 我們希望確保從頭開始重新制作所有功能后,所有功能都會保留,並且不會引入任何錯誤。 為此,我問你,你如何處理這樣的情況,考慮單元測試。 我應該為舊項目庫和新項目庫創建單元測試嗎? 為遺留代碼創建單元測試毫無意義。 或者是嗎?

這不幸取決於你計划如何重寫。 如果您想完全重新設計,那么為遺留代碼編寫單元測試將或多或少無用,您將無法遷移它們。 單元測試與他們測試的單元緊密耦合。 重新設計被測單元通常會使其單元測試無效。

我建議考慮為舊庫編寫集成測試,即驗證大型進程(如果可能的話)。 它們可能更加可以挽救,並且應該讓您確信大局仍然完好無損。 但這可能是高度針對特定領域的,即如果您正在遷移某種工具庫,那么可能沒有廣泛的圖片可供查看!

因此,遺留代碼也不存在單元測試。 從理論上講,我們甚至不確定它是無錯誤的。

單元測試遺留代碼需要一些重新分解技術,這些技術還需要您更改遺留代碼。 如果計划是編寫一個新的庫,那么對舊庫進行單元測試可以使工作量增加一倍,並且不會給你任何好的見解。

您想知道是否沒有引入錯誤:構建新項目測試驅動。 您想知道功能是否相同? 最終用戶驗收測試,因為沒有自動的方法來驗證新舊的行為是否相同。

我錯過了它是由其他組件而不是用戶使用的內部組件的部分。 在這種情況下,您可以編寫黑盒測試。 這確實要求您保持公共合同相同,但允許您識別舊項目和新項目之間的差異。

如果您的目標是保持現有API不變並且僅改進庫的內部實現,則應使用單元測試覆蓋舊庫的公共API。 然后,您可以安全地進行重構和改進。

如果您的改進需要更改公共API,那么舊庫的單元測試將無濟於事 - 您應該使用單元測試來覆蓋新的API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM