我目前正在參與使用C#進行開發 - 這裏有一些背景: 我們使用我們的客戶端應用程序實現了MVP,我們有一個圈規定,沒有任何方法的圈複雜度應大於5. 這導致了很多小型的私人方法,這些方法通常對一件事負責。單元測試專用代碼
我的問題是關於單元測試類:
測試通過的公共方法私有實現是所有罰款...我沒有貫徹這是一個問題。
但是......怎麼樣了以下情況:
例1處理異步數據retrival請求的結果(回調方法不應該純粹是爲了測試是公開的)
例2.的事件,其確實的操作(如更新查看標籤的文本 - 傻的例子,我知道...)
例3您正在使用第三方框架,該框架允許您通過覆蓋受保護的虛擬方法來進行擴展(從公共方法到這些虛擬方法的路徑通常被視爲黑盒編程,並且將具有框架提供的各種依賴關係不想知道)
上面的例子在我看來不是由於糟糕的設計。 他們似乎也不會成爲單獨進行單獨測試的候選人,因爲這樣的方法會失去其背景。
對此有沒有人有任何想法?
乾杯, 傑森
編輯: 我不認爲我是在我原來的問題很清楚 - 我可以測試使用訪問私有方法和使用TypeMock模擬出呼叫/方法。這不是問題。問題在於測試不需要公開的東西,或不能公開的東西。
我不想爲了測試而公開代碼,因爲它可能引入安全漏洞(只發佈一個接口來隱藏這個不是一個選項,因爲任何人都可以將對象轉換回原始類型並獲得訪問的東西,我不希望他們)
重構到另一個類進行測試的代碼很好 - 但可能會丟失上下文。我一直認爲有一個不好的習慣,那就是有'輔助'類,它可以包含一堆沒有特定上下文的代碼 - (在這裏思考SRP)。我真的不認爲這也適用於事件處理程序。
我很高興被證明是錯誤的 - 我只是不確定如何測試這個功能!我一直認爲,如果它可以打破或改變 - 測試它。
乾杯,傑森
你將使用什麼隔離框架? – 2009-10-01 21:01:38
我正在使用Typemock隔離器。嘲笑方法調用很容易 - 我真的不喜歡這樣做,因爲它會改變被測試類的行爲! – Jason 2009-10-03 10:25:51
所有這些讓我希望我可以從頭開始寫自己的框架,所以我可以設計這些問題開始! – Jason 2009-10-03 11:02:13