[91大的TDD課程心得] Unit Test 與物件封裝

良好的物件封裝是 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")]