更新:見this question too.
我只能在這裏回答一些部分:
是好的,打破使用接口的所有相關性只是爲了一類可測試?由於許多虛擬調用而不是普通方法調用,因此它在運行時會涉及大量開銷。
如果你的表現會受太大的緣故吧,沒有(基準!)。如果你的發展受到太多影響,否(估計額外的努力)。如果它看起來不會有太大影響,並且從長遠來看有所幫助,並幫助您提高質量,是的。
你總是可以'測試'你的測試類,或者一個TestAccessor對象,通過它你的測試可以調查其中的東西。這避免了爲了測試而動態分配所有內容。 (它的確聽起來很不錯)
設計可測試的接口並不容易。有時你必須添加一些額外的方法來訪問內部進行測試。它會讓你感到畏縮,但它有好處,而且往往不是那些函數在實際應用中有用,遲早也會如此。
如果我做了重構,它經常發生,因爲大規模的邏輯改變,我必須完全重新進行單元測試。我的代碼更改經常會改變數據處理的基本邏輯。我沒有看到編寫單元測試的方式,在大型重構中不必改變。
defintion的大型重構變化很大,包括測試。很高興你有他們,因爲他們也會在重構之後測試一些東西。
如果您花費更多的時間重構比創建新功能,也許您應該考慮在編碼之前多思考一下,以便找到能夠承受更多變化的更好的界面。另外,在接口穩定之前編寫單元測試是一件痛苦的事情,不管你做什麼。
對接口變化很大的代碼越多,每次更改的代碼越多。我認爲你的問題在於此。我已經在大部分地方設置了足夠穩定的接口,並且不時重構部分。
希望它有幫助。
這不是我編碼之前不認爲的。在客戶看到新功能的初始實現後,需求常常會發生變化。另一個原因是,出於市場營銷的原因,做一個快速和骯髒的實施有時是不切實際的。在這種情況下,我不打算進行單元測試,但有時由於緊張的調節,有時候快速和骯髒的黑客變成了真實的東西。以後再做這個爛攤子測試並不容易。 – frast 2009-06-29 22:18:00