在開發過程常會用單元測試來驗證系統的功能,但單元測試因為是需要跨專案的,對於專案的可見性預設只有public,如果想要測試一些內部的功能該如何做?
近期有在開發類別庫,需要用單元測試來驗證內部封包的正確性,雖然可以暫時把類別改成public之後再改回來,除了很麻煩之外,主要是違反封裝的原則。
解決方法
方法其實很簡單,將類別及方法加上internal,並在類別庫專案(不是測試專案)的AssemblyInfo.cs內加入下面這行,來對外部特定組件增加可見度。
// 加入對外部組件的internal可見度
//"UnitTest"為測試專案的Namespace
[assembly: InternalsVisibleTo("UnitTest")]
加入這行之後就可在測試專案去參考該類別了。
結尾
以上為工作過程的問題紀錄
如果內容有誤,還請先進前輩不吝指教。
參考資料
- ProgressBar:透過InternalsVisibleTo來達成單元測試的外部注入
- .NET:InternalsVisibleToAttribute Class
發佈留言