將私有方法更改爲受保護以進行JUNIT測試是一個不錯的主意。將私有方法更改爲受保護以進行測試
8
A
回答
9
有時候有用,是的。
如果類是可擴展的,請確保使方法最終。
另外,記錄該方法不應該被相同包的子類或外部類調用的事實。
我使用Guava @VisibleForTesting註釋來說明該方法實際上應該是私有的。
+0
感謝您打開我的眼睛@VisibleForTesting。我不知道這存在。它仍然覺得這有點不完美,因爲它僅僅爲了測試的目的而影響實現的語法,但它比暴露應該是私有的成員和方法要好。而限制測試接口方法似乎是一個過分嚴格,有時不切實際的限制。 – Lolo 2013-01-18 18:06:50
4
您可以將方法打包爲本地。
您可以使用反射調用私有方法,或者您可以決定不應該直接測試private
方法,只能間接測試。
5
總的來說不是。單元測試的想法是測試單位。換句話說,接口方法的實現。 如果你想測試一個你不能「看到」的方法,這可能是一種代碼異味。也許你沒有把你的業務邏輯從UI代碼中分離出來。
所以最好的想法是重新考慮你的架構。但是,如果替代方法是不測試代碼,那麼保護這些方法是個好主意。
1
儘管您應該更喜歡按照@ user714965的建議進行重構,但PowerMock的MockPrivate可以在不打開私有方法的情況下進行模擬。
首先編寫測試通常會導致您不需要模擬私有方法的設計。
相關問題
- 1. 將私有方法更改爲受保護或包私有單元測試 - 好還是不好?
- 2. 如何在受測試的方法中模擬受保護/私有方法?
- 3. 受保護的和私有的方法
- 4. 改變私有方法的行爲進行單元測試
- 5. 如何對受保護的方法進行單元測試?
- 6. 將私有或受保護的方法轉換爲公開
- 7. 我應該測試私有/受保護的方法嗎?爲什麼?
- 8. EasyMock和測試受保護的方法
- 9. 如何測試受保護的方法
- 10. 如何測試受保護的方法?
- 11. 測試AccountController的受保護方法
- 12. 測試驅動開發:爲私有/受保護變量編寫測試
- 13. 確保私有/受保護方法的輸入?
- 14. 爲單元測試添加受保護方法的好習慣?
- 15. 保持API調用私有/受保護
- 16. 調用私有或受保護的方法包括:文件
- 17. Rails中的受保護和私有方法
- 18. 保護window.opener免受更改
- 19. 將屬性聲明爲受保護的更好的方法
- 20. Junit測試私有方法
- 21. 受保護/私有繼承鑄造
- 22. C++類(公共,私有和受保護)
- 23. Ruby中的私有/受保護塊?
- 24. 訪問受保護或私有屬性
- 25. 測試受保護的方法是否被調用
- 26. 我應該訪問單元測試的受保護方法嗎?
- 27. 單元測試受C#保護的方法
- 28. Junit受保護的方法
- 29. 受保護的方法
- 30. 爲什麼要調用受保護的或私有的CSharp方法/變量?
爲什麼要這樣呢?在測試之前你改變了一些東西,我看不出有什麼理由呢? – Nanne 2012-04-13 13:23:07
幾乎肯定不是一個好主意;如果你直接測試一個類的內部方法,你應該考慮將它們重構成一個單獨的類。 – 2012-04-13 13:24:19
我在私有方法返回單元測試環境中不可用的某些資源的情況下完成了此操作,並且我想測試一些調用它的其他(非私有)方法。通過使其受到保護,我可以覆蓋它,以便它返回一些存根/模擬而不是不可用的資源。這意味着一個單元測試變得可行,我還沒有找到另一種方法,但它不是理想的。 – 2012-04-13 13:27:23