良好的物件封裝是 Production code 最基本的設計需求。
擁有良好的物件封裝,才能擁有更符合 FIRST 的 Unit Test。
單元測試與物件導向封裝的本質
單元測試的意義在於模擬外部如何使用目標物件,驗證其行為是否符合預期
故應該測試的是該物件的 Public function,若非如此,將失去原意。
且測試程式不具健壯性、測試涵蓋率也失去意義。
物件封裝應定義好「物件的邊界」,將外界不需要知道的實做細節給封裝在內。
也就是封裝變化。
※ Public、Internal、Protected、Private 不該提高層級開放的就不開放,以便維護。
Internal function test project 又無法讀取,該如何測試?
在 AssemblyInfo.cs 加入:
- [assembly: InternalsVisibleTo("XXXXX.Test")]
- 若使用 mock 必須再加入
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]