摘要:[UnitTest] 如何存取內部參數
單元測試寫了一小段時間,原則上是僅測試公用函式
可天不從人願(說不定是自我思考不周造成)
為了達成每一個測試的PASS
有時候會需要改變 private 層級的參數
基本上這樣有點違反測試原則,這樣算是有點白箱測試方法
不符合正常被測程式的所提供的遊戲規則
好吧,還是小小作弊一下通通將變數設成 public 如何?
這絕對不是一個好方法,會打亂原先程式的邏輯,不該開出去的東西還是別亂開比較好
可是單元測試怎辦?如何同時符合封裝原則跟測試任務
在此提供一個小小方法
假設我有兩個Project
MyProject: 待測專案
MyProjectTests:單元測試專案
找到MyProject.AssemblyInfo.cs (組建資訊)
加入下列這行宣告
[assembly: InternalsVisibleTo("MyProjectTests")]
這代表宣告了 MyProjectTests 測試專案是 MyProject 的 Friend Assembly
讓特定的外部組建得以使用 internal 層級的參數/函式/類別
接下來對於原先被設定為 private 的變數改為 internal 這樣即可
在測試專案中即可以引用
(碎碎念: 要提升code coverage偶爾還是要用到特殊手段!)
Reference:
http://blog.darkthread.net/post-2013-09-19-friend-assembly.aspx