單元測試再出發

2022-09-16 22:12:24 字數 2154 閱讀 6971

在構建軟體系統時,測試是軟體開發工作流程的必不可少的部分之一。作為軟體開發人員,都希望編寫的程式按預期工作。程式沒有bug,測試可以協助這個目標的達成。

本文將討論一種稱為單元測試的測試方法。什麼是單元測試?應該如何實施?單測優點和侷限性是什麼?

單元測試的目標是隔離程式的每個部分並顯示各個部分按預期工作。單元測試是由軟體開發人員編寫和執行的自動化測試,以確保應用程式的一部分(稱為單元)按預期工作。

單元是可以在系統中邏輯隔離的最小**段。這可以是單個函式、方法、過程、模組、類或物件。通常,乙個單元有幾個輸入和乙個輸出。單元測試由軟體開發人員在應用程式的開發(編碼階段)期間完成。

只有各個部分執行良好,整個系統才能執行良好。通過為最小的可測試單元編寫測試,軟體開發人員建立了整個系統將按預期工作的信心。一旦軟體開發人員編寫了單元測試,他們就可以在本地機器上執行它以檢查測試是否通過。他們還可以執行所有其他預先存在的測試來檢查它們是否仍然通過。

軟體開發人員通常使用單元測試框架來開發用於單元測試的自動化測試用例。單元測試框架是支援編寫和執行單元測試的軟體工具,包括構建測試的基礎以及執行測試和報告結果的功能。有最流行的程式語言的單元測試框架。

在測試用例執行期間,框架記錄未通過任何標準的測試並在摘要中報告它們。根據故障的嚴重程度,框架可能會停止後續測試。

單元測試還可以設定為在**發布到暫存或生產環境之前在每個新構建上執行。通過這種方式,軟體開發人員可以確保只有通過所有單元測試的**才能進入實時環境。如果在構建過程中任何單元測試失敗,軟體開發人員可以在嘗試再次發布之前先修復問題。

下面是乙個非常簡單的例子,說明單元測試如何工作。我們有乙個簡單的add函式,它接收兩個數字作為引數並返回兩個數字相加的結果。這裡我使用最近新學(其實複習)的groovy單元測試框架spock來演示。有興趣的同學看看舊文章:

static int add(int i, int j)
我們對add函式的非常簡單的第乙個單元測試如下。

def "測試add方法"()
然後,我們可以為add函式新增更多單元測試,並使用其他示例輸入來覆蓋不同的情況,例如負數或無效的輸入引數,以檢查錯誤是否得到正確處理。這是乙個非常簡單的例子,但是,它在實踐中展示了單元測試是如何工作的。

單元測試是一種軟體測試方法,其中測試軟體的各個單元、元件或模組以確定它們是否適合使用。因此,它有很多好處。隨著軟體系統的發展,軟體開發人員從單元測試中獲益更多。如果在早期開發中進行了適當的單元測試,最終將節省軟體開發人員的時間和金錢。

單元測試在開發周期的早期發現問題。這包括軟體開發人員實施中的錯誤。在開始編碼之前或首次編寫**時發現錯誤的成本遠低於稍後檢測、識別和糾正錯誤的成本。

單元測試幫助軟體開發人員建立更好的軟體設計。如果編寫得不好,**可能無法或難以進行單元測試,因此單元測試可以迫使軟體開發人員以更好的方式構建功能和物件。編寫一套完整的測試的過程迫使軟體開發人員仔細考慮輸入、輸出和錯誤條件,從而更清晰地定義單元所需的行為。

由於單元測試的模組化特性,軟體開發人員可以測試軟體系統的各個部分,而無需等待其他部分完成。這將幫助軟體開發人員以小的敏捷增量建立他們的軟體。

單元測試允許軟體開發人員在以後輕鬆重構**或公升級系統庫,並確保現有**仍然正常工作。軟體開發人員所做的任何導致現有單元測試失敗的更改都可以快速識別並解決。單元測試檢測可能破壞現有工作**的更改。

單元測試創​​建系統文件作為積極的***。希望了解單元提供哪些功能以及如何使用它的軟體開發人員可以檢視單元測試以獲得對單元介面 (api) 的基本了解。

儘管單元測試有很多好處,但它也有一些侷限性。

單元測試不會捕獲軟體系統中的每個錯誤。除非它是乙個非常簡單的系統,否則很難評估軟體系統中的每個執行路徑。單元測試僅限於測試單元本身的功能。它不會捕獲其他錯誤,例如整合錯誤或效能錯誤。

如果被測單元的核心功能是與系統外部的事物互動,則設定單元測試可能很困難。在單元測試時,諸如資料庫、檔案系統或外部 api 之類的外部事物可能會帶來挑戰。軟體開發人員可能不得不模擬與外部方的互動,這可能具有挑戰性,而且作為測試還不夠詳盡。

編寫單元測試作為系統開發的一部分通常會讓人感覺成本高昂且速度緩慢。需要編寫更多**,編寫好的單元測試需要時間和精力。開發團隊常犯的錯誤是跳過單元測試。

隨著大多數軟體系統的增長,它們將受益於廣泛的單元測試覆蓋範圍。單元測試有助於更輕鬆地新增新功能、重構現有功能以及了解系統的現有單個元件。盡早新增單元測試最終將節省軟體開發人員時間以提公升效率。

整理再出發

工作和學習佔據了生活的大部分時間,周麼也幾乎沒有給自己計畫放鬆的時間,導致最近身體的疲勞,心情狀態也一般,結果是學沒學進去,工作也沒有多大精力。比如昨天晚上,也是像往常一樣去了自習室,但是在自習室中卻靜不下心,逛逛微博 論壇,時間浪費的很快。都到晚上十點了,什麼也沒學懂,更別說寫文章了。晚上在回來的...

老驥伏櫪再出發

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

沉澱,再出發

有這樣的一年,它為我們帶來了 網際網路 也帶來了由此而生的乙個又乙個風口 有這樣的一年,它讓我們看到了大資料的厚積薄發 雲計算的逐步落地及中國製造2025即將展開的全新格局 有這樣的一年,充滿了收購 融合 轉型 資訊化再出發的種種碰撞與積澱。它正是即將與我們揮手告別的2015年,它因飽含機遇與挑戰而...