2011-03-17 57 views

回答

8

g不是f可見外面,所以我猜想沒有,至少在沒有反射。

我認爲測試g會破壞單元測試的概念,無論如何,因爲您不應該測試實現細節,而只會測試公共API行爲。如果f的測試失敗,則在g中跟蹤錯誤以作爲調試過程的一部分。

如果測試g對您很重要,請將g定義爲f以外的(受保護)方法。不過,這可能會破壞你的設計。

另一個想法是在g調用原始代碼之後撥打assert。這將在測試期間執行,並且如果該屬性不成立,則引發異常,導致測試失敗。它也會以常規代碼存在,但可以由編譯器刪除,因爲assert(和隨播廣告)可以被刪除(請參閱,例如here)。

+2

+1:我完全同意。既然你不能*調用''g()',你不需要擔心它 - 只要'f()'的行爲正確,那麼細節是什麼並不重要。定義並調用'g',或者只是在線執行代碼沒有概念上的區別;這是一種與代碼正確性無關的內部簿記措施。 'f'可以通過讓獨角獸神奇地計算結果來工作;只要結果是正確的並且及時到達(並且沒有明顯的外部依賴),單元測試的工作就不是窺探。 –

+1

@AndrzejDoyle,但如果我只是想加快發展(避免調試)並逐步測試一切...我認爲這個問題類似於http://stackoverflow.com/questions/34571/whats-the-proper-方法來測試一個類與私人方法使用junit – ichaki5748

+2

我測試驅動我的代碼。因此,即使測試不會成爲公共合同的一部分,測試也會幫助我完善邏輯。在這種情況下,我的測試不是關於保證合同,而是開發援助。我想我可以在函數之外開發函數,然後在完成邏輯之後重新定位它。 – chad

相關問題