前言
就理論上沒有理由要針對已封裝的方法進行測試,對於那些 protected 和 private 方法一般會採取間接的測試方法。意即透過測試 public 方法來驗證裡面所呼叫的封裝方法是否符合預期邏輯,而對外部使用者來說,針對 public 方法的單元測試便會順便包含到這些封裝方法的測試,封裝方法本身就是 public 方法的一部分,他們也不需要去分辨哪些是封裝過的邏輯,因為只需要關注 public 方法即可。
封裝本身代表著:針對外部使用者本來就不需要了解,也根本不了解的成員或方法進行隱藏。單元測試本身就是模擬外部使用者的動作,那當然也只需要對測試目標 public 的方法進行模擬與驗證。
如果你發現測試 public 方法無法協助你測到所有想測試的封裝方法,大部分代表在設計本身上就有問題或是那些 protected 和 private 方法在現階段是沒有必要的,屬於 over design。
這其實也是 TDD 提倡的精神,如果全部的測試都符合預期,就代表功能完成了。而且按照測試來撰寫的程式,幾乎不會出現測試無法涵蓋的程式,因為程式本來就是為了滿足測試而撰寫的。