我們都寫過的某種測試
不要驚訝,你已經進行過某種程度的單元測試。你見過提交**前不做測試的開發人員嗎?那什麼是單元測試,什麼不是單元測試呢?在傳統測試中,開發人員使用乙個圖形使用者介面觸發要測試的類的某個行為,然後檢驗結果。
往往說不想的,其實是因為還不會。因為不會,所以想一想就很麻煩,還不如手工測試呢。
我已經寫好**,然後還要去確認寫好的邏輯,好多餘因為我們沒有遵循正確的tdd實踐,所以覺得不舒服和多餘。
單元測試一旦通過,不會經常修改。一般有兩大類經常修改情況:
是的,單元測試確實會增加編碼的時間。但是從整個軟體的交付時間比來說,有好的單元測試的時間會交付更快。一般有健全的單元測試,在測試階段和維護階段會花費更少的時間。我們在做的是乙個完整的軟體,所以時間應該算總的週期
另外乙個原因,有可能是因為不熟練或者沒有合適的工具,所以花了大量時間在重複的工作之上。
其實咱們一直在做不務正業的事。除錯**,給**加注釋,畫流程圖,上網解決問題等等。這些其實都是開發者的日常工作。所以單元測試也是!!
那到底什麼是單元測試呢?
乙個單元測試是一段自動化的**,這段**呼叫被測試的。這段**呼叫被測試的工作單元,之後對這個單元的單個最終結果的某些假設進行檢驗。單元測試幾乎都是用單元測試框架編寫的。單元測試容易編寫,能快速執行。單元測試可可靠、可讀,並且可維護。只要產品**不發生變化,單元測試的結果是穩定的。準備(arrange)物件,建立物件,進行必要的設定
操作(act)物件
斷言(assert)某件事情是預期的。
從呼叫系統的乙個公共方法到產生乙個測試可見的最終結果,其間這個系統發生的行為總稱為乙個工作單元。乙個最終結果有三種形式
帶有返回值的。即基於值的測試。
在方法呼叫前後,系統的狀態或者行為有可見的變化 ,這種變化無需查詢私有狀態即可判斷。即基於狀態測試。
呼叫乙個不受測試控制的第三方系統,這個第三方系統不返回任何值,或者返回值都被忽略。即互動測試。
很多人把進行軟體測試的行為和單元測試概念混為一談。要澄清這個誤解,你首先應該回顧自己以前寫過的測試,問自己如下問題。
我兩周前寫的一單元測試,今天還能執行並得到結果嗎?幾個月前的呢?幾年前的呢?
我兩個月前寫的單元測試,我團隊裡任何乙個人都能執行它們並得到結果嗎?
我能在幾分鐘內跑完我寫過的所有單元測試嗎?
我能一鍵執行我寫過的所有單元測試嗎?
我能在幾分鐘寫出乙個基本的測試嗎?
如果能的話,那就是單元測試。如果不能,那有可能就是整合測試。
那到底什麼是整合測試呢?
整合測試是對乙個工作單元進行的測試,這個測試對被測試的工作單元沒有完全的控制,並使用該單元的乙個或者多個真實依賴物,何如時間、網路、資料庫、執行緒或者隨機數產生器等並不是說整合測試不重要!單元測試和整合測試具有同等重要的地位,但是這兩個測試應該彼此分開,以營造一種「綠色安全區」的感覺總的來說,整合測試會使用真實依賴物,而單元測試則把測試單元和基依賴物隔離開,以保證單元測試結果高度穩定
上面說的是什麼是單元測試。那麼什麼時候編寫測試呢?很多人覺得為軟體編寫單元測試的最佳時機是軟體編碼完成以後,但是越來越多的人選擇在產品**編寫之前寫單元測試
。這種方法稱為測試優先或測試驅動開發(test-driven development, tdd)。
執行步驟:
編寫乙個會失敗的測試,以證明產品中**或功能的缺失。編寫測試的時候,要假設產品**已經能工作了,這樣測試的失敗就說明產品**中有缺陷。
編寫符合測試預期的產品**,使測試通過。產品**應該盡量簡單。
重構**。如果測試通過了,你就可以編寫下乙個單元測試,或者進行重構,使**可讀性更強,或者去除重複**等。
即紅-->綠-->重構
本文的概念大部分出自於《單元測試的藝術》,特此說明。因為書裡的概念講得是我想要的,比網上搜的其他資源要適合自己些。
更具體的概念可以翻閱《單元測試的藝術》。
單元測試概念記錄
單元測試 孤立的執行和測試某乙個單元 注重於每乙個可能出錯的細節 優秀的單元測試的特性 1.自動的,可重複的 2.容易實現的 3.一旦寫好將來都可以使用 4.任何人都可以執行 5.單擊乙個按鈕就可以執行 6.可以快速的執行 判斷是否是單元測試 1.兩周,兩個月甚至兩年寫的單元測試還可以執行嗎?2.兩...
iOS基礎 單元測試
單元測試 unit testing 對軟體中最小可測試單元進行檢查和驗證。一般面向過程的語言中,基本單元為函式,物件導向的語言中,基本單元通常是類,其實對於乙個手機上的 來說基本單元也可以是乙個 ui頁面。平時我們寫了乙個函式,執行以下看是否正常工作,也屬於單元測試。測試用例 test case 對...
單元測試 單元測試文章收藏
前言 前段時間公司計畫做自動化測試,自己也打算圍繞幾個點做相關調研,現在想想呢?其實對自動化測試的概念都還不是十分清晰,當時主要還是圍繞 單元測試 向qa小夥伴學習了一段時間,現由於公司重組,學習中斷,這裡簡單記錄一些單元測試好文,留待後續參考.什麼叫自動化測試?自動化測試覆蓋率?覆蓋率如何做到的?...