在開發程式中使用單元測試,「封裝」這個概念似乎和單元測試相衝突。
封裝的原則是把程式邏輯隱藏,只保留必要的屬性、方法對外公開。這個基於保護的原則在單元測試中需要「觀察改變」的需要相互衝突。單元測試為了測出邏輯是否正確,就必須有對應的類別方法能夠觀察、確認數值的變化是否符合預期。將方法 public 變得無可避免。
在滿足單元測試需要的公開方法之後,希望達到「封裝」的目的,不要曝露出過多實作細節。就需要有個「過濾」的機制,這個時候「介面(interface)」就可以派上用場。其它程式只知道介面定義的方法,而不知道實作的類別額外公開的方法,原來為了單元測試的需要所開放的程式碼,就被介面所隱藏,以此達到保護邏輯的目的。
回過頭來看看之前所學,難怪看到的程式原則中,總是寫著「對介面撰碼」而不是「對父類別撰碼」。而程式碼中的註解文件(xDoc, 如 JavaDoc)中,也具有能將方法標注為「隱藏」的語法。看起來可能都是由於單元測試的發展而演化而來的吧!
沒有留言:
張貼留言