2010-11-19 39 views
1

的我有一個第三方服務單元測試策略 - 驗證狀態私有字段

每次臨危它更新內存中的記錄(List<MyObj>舉行)的消息時臨危消息的窗口服務,並定期廣播他們

我想測試名單的狀態

選項我想出了是

  1. 將列表的可見性從私有更改爲受保護。然後創建一個具有公開屬性的測試特定子類,其中顯示狀態

  2. 將公共屬性添加到僅在調試模式下編譯的類中。 即

#if (DEBUG) 
     public IList<MyObj> TestProperty 
     { 
      get { return _myObj; } 
     } 
#endif 

哪一個是最好的解決方案(或至少壞)?

有沒有更好的方法?

* 編輯 *

剛剛發現這篇文章提供了一個徹底的運行所有選項

http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx

回答

2

你有兩個選擇:

  1. 做一個internal財產暴露領域,然後通過授權訪問InternalsVisibleTo屬性到您的測試組件。這樣,你可以保持封裝。
  2. 通過反射直接訪問該字段。我所知道的所有測試框架都有一個API(例如MSTest中的PrivateObject或MbUnit中的Mirror ...)。

HTH。
Thomas

2

如果可能,試着測試你的代碼的可見效果下降。你說班上定期播出清單......好吧,如果你可以增加額外的控制來發送廣播,你可以通過強制廣播來有效地測試清單的內容。這是代碼的可見結果,所以理想情況是您應該測試。

我都是爲了測試內部的東西而做出的,但是在這種情況下,它聽起來像是可能會有點過頭。

(另一種方法是使一個內部財產,並使用[InternalsVisibleTo]。)

+0

我明白你的觀點 - 然而,廣播信息已經從接收到的信息轉變而來。我想驗證整個清單上的各種操作。此外,廣播由定時器觸發,這使得難以通過單元測試進行驗證。(謝謝) – ChrisCa 2010-11-19 09:53:37

+0

@Christo:我會建議讓廣播部分更容易測試,更可編程的定時器。 – 2010-11-19 12:34:32