簡體   English   中英

單元測試策略 - 驗證私有領域的狀態

[英]Unit Testing Strategy - Verify State of private field

我有一個Windows服務,收到來自第三方服務的消息

每次收到消息時,它都會更新內存中的記錄(保存在List<MyObj> )並定期廣播它們

我想測試List的狀態

我想出的選擇是

  1. 將List的可見性從private更改為protected。 然后創建一個Test-Specific子類,它具有公開屬性的公共屬性

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

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

哪種解決方案最好(或最不好)?

有沒有更好的辦法?

* 編輯 *

剛剛發現這篇文章提供了所有選項的徹底淡化

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

盡可能嘗試測試代碼的可見結果。 你說這個類定期廣播列表......好吧,如果你可以對廣播的發生方式添加額外的控制,你可以通過強制廣播來有效地測試列表的內容。 這是代碼的可見結果,所以理想情況下這就是你應該測試的內容。

我完全是為了測試內部有意義,但在這種情況下,聽起來你可能會走得太遠。

(另一種方法是制作內部屬性,並使用[InternalsVisibleTo] 。)

您有兩種選擇:

  1. 創建一個internal屬性以顯示該字段,然后通過InternalsVisibleTo屬性授予對測試程序集的訪問權限。 這樣,您可以保持封裝。
  2. 通過Reflection直接訪問該字段。 所有的測試框架,我知道有,一個API(例如PrivateObject在MSTest的或Mirror在MbUnit的...)。

HTH。
托馬斯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM