有時我想在一個方法中測試一箇中間值。但該方法不能分割。所以我想知道JUnit是否只能測試一個方法。如果我可以在方法中放入類似斷點的東西,並獲取本地值並斷言它,那會更好。如果不可能,你如何解決這類問題。使用junit測試可以測試本地值嗎?
回答
添加一個破發點是不是真正的單元測試,事實上根本不是測試。你可以稱它爲檢查,但沒有檢查驅動開發這樣的事情。
無論如何,新的單元測試人員經常會發現這個問題,他們想測試私有或本地值讓它成爲一個變量或方法。當我開始TDD時,我自己實際上已經相當分階段了。但事情是,在單元測試中,目的是對特定功能和所有可能的結果進行黑盒測試。那個黑匣子裏面發生的事情不是你關心的,也不需要單元測試它。
如果你覺得測試的中間值,那麼也許你的方法是太長,應分成兩個或更多可測試的小方法。如果它不能完成,那麼你不應該擔心測試它們。
如果該中間值正在從另一個公共方法獲取其值,那麼它的即方法要在單獨的單元測試中測試,而不是您正在測試的方法內的值。
你的問題導致的D的在TDD的解釋。特別是當你使用TDD來表示「測試驅動設計」(儘管有些人更喜歡短語「測試驅動開發」)。
由於@Shahzeb指出,也許你的方法是太長,應分爲兩種方法,其中一人產生中間值,另一個把它作爲輸入。我們傾向於用這種方式來考慮代碼是相當字面的Driven通過測試。我們的代碼的設計更好,因爲我們正在分離關注點,以便開始測試它們。所以你在問一個很好的問題(他的簡短答案是「否」),這些問題使得TDD能夠改進我們的設計。
非常好地說,卡爾精確準確,富有洞察力。 – Shahzeb
感謝您的回答。 但是,當我寫一個太長的方法來測試,然後我把它分成兩個私有方法。我認爲問題依然存在,因爲我似乎無法測試私人方法。有沒有更好的方法來解決這個問題,然後改變私人公共? –
的想法是,你不測試私有(中間)價值可言,因爲它不是外部重要(這就是爲什麼你明智地保持其私密性。)私營值表示你的對象一些狀態,你現在設置它的意圖,它會影響未來的電話到您的公共界面,對嗎?所以改變你的一個測試來打兩個電話。讓第一次調用做所需的任何事情,按照您認爲的方式設置狀態,然後進行第二次調用,並查看它在設置該變量時的結果。如果它真的是私有的,單元測試並不重要,它的價值是什麼 - 只是它在正確的時間正確地產生了期望的結果。但是這個建議帶來了一個警告:它正在進入那個草坪,你可能會要求單元測試做的不僅僅是一個單元的測試。
另一種看法:你說你的方法「不能分割」,但不給予解釋爲什麼。如果你不能改變設計,那聽起來更像是你可能試圖將單元測試嵌入到遺留代碼中,而不是執行測試驅動開發。這很好,你不必在這裏放棄TDD,但也許還有其他方法需要考慮。一旦你通過測試,在TDD中,這是你重構方法的一部分。事實上,你談論的是一箇中間值,這表明你的方法有太多的責任。考慮使用抽取方法將更簡潔的功能部分封裝到更小的可測試服務方法中。
如果這不是你想要完成的,那麼你試圖執行的測試可能會被認爲是「太大」。也許你試圖做的測試更多的是驗收測試。再次,這很好,驗收測試也非常重要,但它不再是真正的單元測試。
你的答案很好。但是我仍然不能根據當前的知識獲得意義,我會繼續學習TDD以更好地理解。 –
- 1. 可以跳過jUnit測試嗎?
- 2. junit測試可以並行運行嗎?
- 3. 可以並行運行Junit測試嗎?
- 4. 寫JUnit測試本地@ExceptionHandler
- 5. 測試運行時,我可以跳過JUnit測試嗎?
- 6. 使用普通的JRE Junit測試可以測試Android應用程序嗎?
- 7. 測試使用JUnit
- 8. 測試使用JUnit
- 9. 我可以使用Junit測試作爲先決條件另一個Junit測試
- 10. 逃離JUnit測試用例可能嗎?
- 11. 用jUnit測試
- 12. 我可以在Spring JUnit測試中使用@Import嗎?
- 13. 我們可以使用junit編寫功能測試嗎?
- 14. 我們可以在Android JUnit測試中使用OpenCV嗎?
- 15. 如何測試junit測試
- 16. Maven.surefire.util.SurefireReflectionException當測試Junit測試
- 17. 我可以在Junit測試中檢測泄漏的線程嗎?
- 18. 可以用behat測試版本庫嗎?
- 19. 您可以使用Facebook「測試用戶」測試Messenger Bot嗎?
- 20. Selenium RC測試:以JUnit測試運行時出錯,在以JUnit測試時以無錯誤測試
- 21. 我可以使用本地主機在SDK中測試XMLHttpRequest()嗎?
- 22. JUNIT有條件測試可能嗎?
- 23. 我可以使用機架測試進行部署測試嗎?
- 24. 以後的TDD測試可以使早期測試過時嗎
- 25. 有人可以解釋測試驅動開發方面的JUnit測試嗎?
- 26. junit - 本地測試方法覆蓋 - @BeforeClass
- 27. 如何在Android JUnit測試中測試文本框的值
- 28. 用web驅動測試junit測試
- 29. JUNIT測試用例測試網頁
- 30. Maven JUnit測試用例測試類NoClassDefFoundException
非常感謝,您的回答非常好。我還遇到過另一個問題,就是當我測試一個關於數據庫的模塊時,測試總是改變數據庫中的值。但我希望它發生。那麼有沒有辦法在setUp中備份數據庫,並在tearDown中恢復數據庫(我不會想寫備份代碼,讓系統自動執行)。
測試gui怎麼樣? TDD是否也適合gui測試?我發現它很難從價值中獲得價值。
ps:現在我正在開發一個android項目。再次感謝。 –
歡迎您.TDD不適合基於web的應用程序的GUI,您可以使用selinium或風車(搜索谷歌)爲Android我不測試GUI不知道一般人在做什麼。至於數據庫問題,您需要使用一個模擬框架,不要擔心它們不是很複雜,請查看http://code.google.com/p/android-mock/和http://code.google.com/p/。 mockito /想法是,你永遠不會堅持數據庫中的任何東西,但假裝(模擬),如果它發生了。單元測試不應該作爲集成測試工作的數據庫。話雖如此,你可以回滾 – Shahzeb
交易拆解你的測試。但是,這應該是另一個問題:)請求另一個人顯示您的代碼並詢問您如何回滾事務。我很快就會走了,但是我相信其他人肯定會從社區中接受這一點。但就像我說的,我從來沒有打過實際的數據庫,因爲單元測試不應該。只是嘲笑事情:)祝你好運這是有趣的東西,我相信你會喜歡。 – Shahzeb