在工做中或者在面試中,我常常碰到的開發人員就是對單元測試不重視,這一類基本上都表現出了一種「無知的自信」,總以爲本身寫的代碼質量很高,直到一次次蟲子(Bug)把本身咬的頭破血流時,才發現原來本身的代碼已經到了剪不斷理還亂的狀態,而每一次修改一個bug,都須要走一遍「墨鏡迷宮」 (看上圖)。還有不少人知道單元測試或者寫出了單元測試,可是就是寫了一個方法,上面標註了一個[Test]屬性而已,甚至不少的人單元測試上面標註的是[IgnoreTest], 每次看見這些,我都深深的感到推行單元測試之路是艱難的,是遙遠的,可是我依然堅信是是渴望也可及的,只要有着深深的信念,堅強的意志,無謂的勇氣,一頭扎進去泥巴堆裏,假以時日,當大雨來臨,必將帶走泥巴,今後你拔劍揚眉,哦,你不用拔劍了,由於你就是劍。。。前端
爲了讓更多人可以拔劍揚眉,也爲了咱們公司剛入職的新人作一些培訓,我精心準備了單元測試的一些知識,在此爲你奉上,我儘可能用簡短的語句來描述,若是你不清楚我說的某一些點,那麼歡迎你發郵件給我 wangdeshui@outlook.com,我能夠針對集中的點發篇文章,若是你想知道我說的全部點怎麼實踐,那就聯繫我,試試加入到咱們公司來。面試
單元測試是開發者編寫的一小段代碼,用於檢驗被測代碼中的一個很明確的功能是否正確。一般而言,一個單元測試是用於判斷某個特定條件(或者場景)下某個特定函數的行爲。數據庫
執行單元測試,是爲了證實某段代碼的行爲確實和開發者所指望的一致。所以,咱們所要測試的是規模很小的、很是獨立的功能片斷。經過對全部單獨部分的行爲創建起信心。而後,才能開始測試整個系統。編程
不少人認爲單元測試很花時間,可是想一想咱們在下面幾點話的時間,我常常看到爲了測試一個簡單的API方法,咱們不少人必須讓前端跑起來,甚至本身寫一個客戶端才能調用網絡
不少人認爲測試不是本身的工做,可是想想每次測試提出一個bug所花的時間,以及你改bug所化的時間,因此下面2點是很重要dom
單元測試運行很頻繁,是輔助開發的,在開發過程當中運行,若是慢影響很大函數
任什麼時候候一樣的輸入須要一樣的結果工具
Date date=new Date() Random.next()
這樣的代碼都須要Mock掉,否則時間每次都不一樣,結果就會不同。post
** 全部的測試只有兩種結果:成功和失敗**
不能部分測試經過單元測試
一個測試只驗證一個行爲
** 測試行爲,不要測試方法 **
好比一個測試裏設置了一個屬性值,而後在另一個測試裏用,若是必須共享能夠放到Setup裏
適當時候能夠封裝本身的Assert
好比:
Assert.IsProgrammer(Jack) Return Jack. Cancooking() && Jack.CanCoding()
If(global.IsTest){…}
下面是.NET程序經常使用的單元測試須要的技術和工具,其它語言請自信比對。