在計算機編程中,單元測試是一種軟件測試方法,經過該方法能夠測試源代碼的各個單元以肯定它們是否適合使用。 單元是最小的可測試軟件組件, 它一般執行單個內聚功能。單元測試就是是指對這個最小可測試組件——即單元進行檢查和驗證。 程序員
單元體量小,所以比大塊代碼更容易設計、執行、記錄和分析測試結果。 經過單元測試發現的缺陷很容易定位,而且相對容易修復。單元測試的目標是將程序分離成各自獨立的部分,並測試各個部分是否正常工做。它將可測試軟件的最小部分與代碼的其他部分隔離開來,並肯定其行爲是否與預期的徹底一致。單元測試能在使用過程當中發現不少缺陷,在這種過程當中證實自身價值。它實現了測試過程的自動化,減小了發現應用程序中更復雜部分中包含的錯誤的困難,而且因爲能夠關注到每個單元而提升測試覆蓋率。 編程
常見單元測試框架有JUnit, TestNG, PHPUnit, PyTest, Jest, CppUnit, GTest, QTest 等八種,目前國產主流項目管理軟件禪道全面集成這八種單元測試框架,打通持續集成閉環,將測試用例細分了單元測試用例和功能測試用例,能夠直接在禪道頁面上導入各類各樣的單元測試框架的執行結果。這八種單元測試框架經過禪道ZTF與Jenkins持續集成功能打通。用戶發起任務後,經過ZTF自動執行測試腳本,把單元測試的結果回傳給禪道,兩者合做打通了持續集成閉環,打通了項目管理工具和持續集成工具之間的溝壑。安全
在Apiumhub,咱們採用敏捷方法,而且大量應用單元測試。單元測試是極限編程(Extreme Programming,XP)的一個特徵,極限編程是敏捷軟件開發方法之一,它能帶來快速的測試驅動開發。咱們堅信敏捷就要作持續集成和測試驅動開發。經過測試驅動開發,開發人員在開發代碼時會建立單元測試,以便每一個單元測試一般在編寫代碼以前就測試一小段軟件代碼。框架
單元測試提供了許多好處,包括及早發現軟件錯誤、促進變化、簡化集成、提供文檔來源以及許多其餘優勢,接下來將對其進行詳細介紹。工具
單元測試的主要好處之一是它使編碼過程更加靈活,更遵循敏捷開發方法論。 當向軟件中添加愈來愈多的功能時,通常須要更改舊的設計和代碼。 可是,更改已經測試過的代碼既冒險又高成本。 若是此時採用單元測試,那麼就能夠放心地進行重構。
單元測試實際上與各類類型的敏捷編程緊密結合,由於測試被內置在其中,讓程序員能夠更輕鬆地進行更改。 換句話說,單元測試有助於安全重構。單元測試
單元測試能夠提升代碼的質量。 它可以肯定在進一步發送代碼進行集成測試以前可能出現的每一個缺陷,在實際編碼以前編寫測試讓人更難以考慮到這種問題。 而單元測試能夠暴露出極端狀況,讓人編寫出質量更高的代碼。測試
使用單元測試會讓問題在早期就被識別發現。因爲單元測試是由在集成以前測試單個代碼的開發人員執行的,這樣能夠很早地發現問題,並在不影響其餘代碼片斷的狀況下解決問題。這既包括實施中的Bug,也包括單元規範中的缺陷或缺失部分。編碼
單元測試容許在未來重構代碼或升級系統庫,並確保該模塊仍然正常工做。單元測試能監測到可能違反設計合同的變化,有助於維護和更改代碼。單元測試還能夠減小新開發功能中的缺陷,減小現有功能更改時出現的錯誤。
而後經過單元測試對應用程序的各個部分進行測試,驗證每一個單元的準確性,再將單元集成到應用程序中。因爲已經對各個單元進行了驗證,在以後的集成過程當中對應用程序進行測試就變得更容易。spa
單元測試提供系統的文檔。但願瞭解單元提供了哪些功能以及如何使用這些功能的開發人員能夠查看單元測試,以得到對單元接口(API)的基本理解。.net
單元測試有助於簡化調試過程。 若是測試失敗,則僅須要調試代碼中最新的更改,這樣以往的冗長的調試過程將被大大縮減。
率先編寫測試會迫使程序員在編寫代碼以前就仔細考慮設計和其餘必須完成的工做。 這不只可讓人專一,還能夠建立更好的設計。 測試一段代碼會迫使程序員定義該代碼的責任。若是能夠輕鬆作到這一點,則意味着代碼的職責是被明肯定義的,所以將具備很高的凝聚力。
單元測試會更早地發現錯誤,有助於下降錯誤修復的成本。想象一下在開發的後期階段(好比在系統測試或驗收測試中)才發現Bug的成本將有多高。固然,前期檢測到的錯誤也更容易修復,由於後期檢測到的錯誤一般是許多更改的結果,測試人員可能就不會真正知道是哪個致使了錯誤。
單元測試是針對代碼單元的獨立測試,核心是「獨立」,優點來源也是這種獨立性,而所面臨的不足也正是由於其獨立性:既然是「獨立」,就難以測試與其餘代碼和依賴環境的相互關係。 單元測試與系統測試是互補而非代替關係。單元測試的優點,正是系統測試的不足,單元測試的不足,又恰是系統測試的優點。不能將單元測試當作解決全部問題的萬金油,而需理解其優點與不足,揚長避短,與系統測試相輔相成,實現測試的最大效益。
參考文獻:Ekaterina Novoseltseva.8 Benefits of Unit Testing[OL].(2019-08-30)
https://dzone.com/articles/to...