在單元測試中,什麼是「單元」?什麼是「單位」?
什麼是「單位」?
回答
我通常通過單一方法將其定義爲單個代碼執行路徑。根據經驗法則,測試方法所需的單元測試次數等於或大於方法的cyclomatic complexit y編號。
我們將'unit'定義爲一個類。
正如你正確地聲稱'單元'是一個模棱兩可的術語,當開發人員簡單地使用表達式而不添加細節時,這會導致混淆。在我工作的地方,我們花時間來定義當我們說'單元測試','驗收測試'等時我們的意思。當有人加入團隊時,他們會學習我們的定義。
從實際的角度來看,對於「單位」的含義可能總是存在意見分歧。我發現重要的是,在項目的上下文中,術語一致地使用。
我很好奇 - 什麼是其他範式的單位?例如,在函數式編程中,單元是一個函數嗎?在程序方案中,單位會是什麼? – 2008-10-27 13:32:23
我認爲這個問題更加複雜的是許多工具的名字都有「單位」。例如,你通常仍然使用jUnit來編寫包中類之間交互的測試;或整個罐子。但我不認爲包裝或罐子是'單位'。 – johnstok 2008-10-27 13:43:01
可以是不同的東西。一個類,一個模塊,一個文件,...選擇你想要的粒度的測試。
儘管定義可能會有所不同,但「單位」是一段獨立的代碼。
通常,它是一個單一的類。
但是,很少有類孤立存在。所以,你經常不得不模擬與你的課堂進行合作的課程。
因此,一個「單位」(也稱爲「夾具」)是一個單一的可測試的東西 - 通常是一個班級加上合作者的模型。
您可以使用單元測試技術輕鬆測試相關類的包。我們一直這樣做。這些燈具很少或沒有模擬。
實際上,您可以將整個獨立應用程序作爲單個「單元」進行測試。我們也這樣做。提供一組固定的輸入和輸出,以確保整個應用程序正確執行任務。
單元是任何可以單獨測試的單元。因此,人們幾乎總是在面向對象的環境中測試方法,以及在該類的方法之間存在緊密耦合的一些類行爲。
我會說一個單位是一個'黑匣子',可以在應用程序中使用。它具有已知的接口並提供明確的結果。這是必須根據設計規範工作並且必須可測試的。在說了這些之後,我經常在這樣的「黑匣子」中構建物品時,使用單元測試就像開發援助一樣。
我想說單元測試中的一個單元是單個責任對於一個類。
當然這個觀點來自我們的工作方式:
在我的球隊,我們使用,我們測試一個類的職責測試項單元測試。我們使用模擬對象來覆蓋所有其他對象,這樣,如果其他對象在其中存在錯誤,那麼這些類職責就會真正隔離並且不會受到影響。
我們使用術語集成測試來測試兩個或多個類是如何一起運行的測試,以便我們看到實際功能在那裏。
最後,我們幫助我們的客戶編寫驗收測試,它對應用程序進行整體操作,以查看「用戶」使用應用程序時實際發生的情況。
這是什麼讓我覺得這是一個很好的描述。
如果我工作'單位'是一個功能。這是因爲我們不允許在設計中使用功能分解以外的任何其他功能(無OOP)。我同意Will的答案100%。至少這是我在針對引擎和飛行控制以及各種其他系統的嵌入式編程工作範例內的答案。
根據我的經驗,關於「什麼是單位」的爭論是浪費時間。
更重要的是「測試速度有多快?」快速測試以100 + /秒的速度運行。緩慢的測試運行得足夠慢,以至於每次停下來思考時都不會反射性地運行它們。
如果你的測試速度很慢,你不會頻繁地運行它們,從而使bug注入和bug檢測之間的時間變長。
如果你的測試很慢,你可能沒有得到單元測試的設計好處。
想快速測試?按照Michael Feather的rules of unit testing。
但是如果你的測試速度很快而且他們幫你編寫代碼,誰在乎他們有什麼標籤?
我的理解(或基本原理)是單元應遵循類似於代碼分層分解的抽象層次和範圍。
一種方法是在抽象的低電平的小和經常原子(在概念上)的操作,因此它應該被測試
類是一中級概念,提供服務和狀態,並且因此應該被測試。
甲整體模塊(尤其是如果其組成部分被隱藏)是具有有限的接口的高級別概念,所以應該進行測試,等等
由於許多錯誤從多個方法和類之間的相互作用產生,我沒有看到單元測試只有單個方法才能實現覆蓋,除非你已經有方法利用每一個重要的組合,但是這將表明你在編寫客戶代碼之前沒有足夠的測試。
這並不重要。當然,你要求開始進行單元測試是正常的,但我重複一遍,這並不重要。
單位是沿着線的東西:
- 由測試調用的方法。在OOP中,這個方法必須在類的一個實例上調用(除了靜態方法)
- 過程語言中的一個函數。
但是中,「單元」,函數或方法,也可從應用程序,這同樣是由測試行使調用另一個「單元」。所以「單元」可以跨越幾個功能甚至幾個類別。 「
」測試比單元更重要「(testivus)。一個好的測試應是:
- 自動 - 執行和診斷
- 快 - 你會碰到他們經常
- 原子 - 一個試驗應測試的只有一件事
- 隔離 - 測試不得依賴對方
- 重複 - 結果將是確定性的
- 1. 單位是什麼條件?
- 2. gettimeofday()的單位是什麼?
- 3. pool_recycle標誌位是什麼單位? [SQLAlchemy]
- 4. 是什麼單位,返回函數
- 5. pdf2json頁面單位:這是什麼?
- 6. 什麼是DbGeography返回距離單位?
- 7. 什麼單位是Redis server_load stat?
- 8. Titanium Mobile的「font-size」是什麼單位?
- 9. 什麼是「原子數據單位」?
- 10. WatiN NativeElement.GetElementBounds() - 什麼是度量單位?
- 11. 什麼是「英雄單位」的含義?
- 12. pg_stat_bgwriter表中buffers_checkpoint的單位是什麼?
- 13. sp_whoisactive返回值的單位是什麼
- 14. FB.getAuthResponse()的單位是什麼?expiresIn?
- 15. margin-left默認單位是什麼
- 16. PostgreSQL shared_buffers的單位是什麼?
- 17. 在Skobbler API中,什麼單位是
- 18. psutil.Process.get_memory_info中RSS的單位是什麼?
- 19. UIBezierPath - 什麼是單位半徑
- 20. 什麼單位是directx視口值?
- 21. 什麼是Facebook的時間軸單位
- 22. MySQL InnoDB:「讀/秒」的單位是什麼?
- 23. jScience中的單位;什麼是角速度的單位?
- 24. () - >單位和(單位) - >單位類型有什麼區別?
- 25. LayoutParams使用什麼單位?
- 26. jQuery.css(),那些位置/大小值是什麼單位?
- 27. MongoDB位置索引的單位是什麼?米?萬里?
- 28. 什麼是可寫位圖?
- 29. 什麼是位圖閾值?
- 30. Android位圖 - 什麼是nativeBitmap?
相關的http://stackoverflow.com/questions/16860/getting-started-with-unit-testing – tvanfosson 2008-10-27 14:20:44