![](/img/trans.png)
[英]C#: Mocking and testing protected (or private) methods in sealed classes — approaches
[英]Testing classes with threads, events, and private methods
我已經做了很多關於測試復雜類和私有方法的主題的閱讀。
普遍的共識似乎是:
所以,我需要你的幫助。
所以我有一個相對簡單的類,它的長期工作是:
的方法,另外:
該類的重點是抽象出許多容錯和線程...基本上通過使用一個簡單的Timer類和一些內部列表來跟蹤錯誤等。
由於Timer,某些方法在異步上被調用在不同的線程上...另外一堆方法依賴於全局私有字段。
我應該如何測試這個類...特別是因為有很多方法是私有的?
歡呼的家伙
我將提取代碼以將數據輪詢到可以模擬的單獨類中,並且還提取出於相同原因發送該數據的代碼。 您可能希望提取數據映射代碼,具體取決於它的簡單程度。
我絕對會在單元測試中使用模擬計時器,否則你的測試很難設置並且運行緩慢。 您可以在構造函數中傳入計時器,也可以公開可以設置的屬性。 我經常在構造函數中創建一個常規計時器,然后從我的單元測試中覆蓋它。
您也可以提取重試邏輯,以便可以與其他代碼分開測試。 傳遞代碼的代理以嘗試重試可能是將數據代碼與重試邏輯分離的一種方法。 您還可以使用IEnumerable
和yield
語句生成數據並將其提供給重試代碼。 本質上,我正在尋找方法來使重試代碼不直接調用它應該嘗試重試的目標代碼。 這樣可以更容易地測試並生成所有可能的錯誤,盡管只需模擬目標代碼就可以獲得一些相同的好處。
如果您確實需要測試多線程方案,那么可以使用一些工具來協調測試中的線程。 其中一個是我創建的Java MultithreadedTC名為TickingTest的端口。
你可以嘗試使用像JMock這樣的東西。 這將讓你用你可以控制的模擬計時器替換真正的計時器。 然后,您可以設置以定義的順序觸發方法調用的測試用例,還可以通過創建模擬數據源來設置錯誤條件。
編輯:哎呀! 沒看到C#標簽。 也許有一個C#等同於JMock。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.