[UnitTest] 如何存取內部參數

  • 468
  • 0

摘要:[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

Friend 組件 (C# 和 Visual Basic)