單元,功能,驗收和集成測試(以及我未說起的任何其餘類型的測試)之間有什麼區別? html
一些(相對)最近反對過分模擬和純單元測試的想法: 架構
單元測試:已知應用程序中單個模塊或獨立組件的測試是單元測試,單元測試將由開發人員完成。 函數
集成測試:結合全部模塊和測試應用程序來驗證通訊和模塊之間的數據流是否正常工做,此測試也由開發人員執行。 微服務
功能測試檢查應用程序的各個功能意味着進行功能測試 oop
驗收測試此測試由最終用戶或客戶完成,不管構建應用程序是否符合客戶要求,客戶規範是否已知是驗收測試 單元測試
我將用一個實際的例子解釋你這個,沒有理論的東西: 測試
開發人員編寫代碼。 還沒有實現GUI。 此級別的測試將驗證函數是否正常工做以及數據類型是否正確。 此測試階段稱爲單元測試。 google
開發GUI並將應用程序分配給測試人員時,他會與客戶端驗證業務需求並執行不一樣的方案。 這稱爲功能測試。 在這裏,咱們將客戶端需求映射到應用程序流。 編碼
集成測試:假設咱們的應用程序有兩個模塊:人力資源和財務。 HR模塊以前已交付並通過測試。 如今財務已經開發並可供測試。 相互依賴的功能如今也可用,所以在此階段,您將測試二者之間的通訊點,並驗證它們是否按要求中的要求運行。 spa
迴歸測試是另外一個重要階段,在任何新的開發或錯誤修復以後完成。 其目的是驗證之前的工做功能。
http://martinfowler.com/articles/microservice-testing/
Martin Fowler的博客文章講述了測試代碼的策略(特別是在微服務架構中),但大多數都適用於任何應用程序。
我將引用他的摘要幻燈片:
- 單元測試 - 在應用程序中運行最小的可測試軟件,以肯定它們是否按預期運行。
- 集成測試 - 驗證組件之間的通訊路徑和交互以檢測接口缺陷。
- 組件測試 - 將運行的軟件的範圍限制在被測系統的一部分,經過內部代碼接口操做系統,並使用測試雙精度將被測代碼與其餘組件隔離。
- 合同測試 - 驗證外部服務邊界處的交互,聲明它符合消費服務所指望的合同。
- 端到端測試 - 驗證系統是否知足外部要求並實現其目標,從頭至尾測試整個系統。
這很簡單。
單元測試:這是由具備編碼知識的開發人員實際進行的測試。 此測試在編碼階段完成,它是白盒測試的一部分。 當一個軟件用於開發時,它被開發成一段代碼或稱爲一個單元的代碼片。 這些單元的單獨測試稱爲開發人員進行的單元測試,以發現某些人爲錯誤,如缺乏語句覆蓋等。
功能測試:此測試在測試(QA)階段完成,它是黑盒測試的一部分。 之前編寫的測試用例的實際執行狀況。 此測試實際上由測試人員完成,他們找到站點中任何功能的實際結果,並將此結果與預期結果進行比較。 若是他們發現任何差別,那麼這是一個錯誤。
驗收測試:知道爲UAT。 這其實是由測試人員以及開發人員,管理團隊,做者,編寫者以及參與此項目的全部人完成的。 確保項目最終準備好免費提供。
集成測試:代碼單元(在第1點中解釋)相互集成以完成項目。 這些代碼單元可使用不一樣的編碼技術編寫,也可使用不一樣的編碼技術,所以開發人員能夠完成此測試,以確保代碼的全部單元與其餘單元兼容,而且不存在任何集成問題。