代碼的免疫系統(tǒng)

只有了解了設(shè)計(jì)它的初衷第步,才能更好的理解它的應(yīng)用并更加主動(dòng)地去學(xué)習(xí)并克服它的難點(diǎn)粘都。

(下面主要是從前端的角度描述的)

那么翩隧,單元測(cè)試的設(shè)計(jì)初衷是什么呢呻纹?也就是為什么要有單元測(cè)試?

根本的原因是用來(lái)確定設(shè)計(jì)的接口或API是否合適使用淑仆,是否和預(yù)想的一樣。

每個(gè)單元測(cè)試就是一段測(cè)試一個(gè)模塊或接口是否能達(dá)到預(yù)期結(jié)果的代碼嘁圈。

開(kāi)發(fā)人員需要單元測(cè)試來(lái)模擬使用者最住,并快速檢驗(yàn)代碼是否健壯涨缚。

通過(guò)單元測(cè)試可以更高效更穩(wěn)定的確認(rèn)代碼是否符合需求以及代碼是否健壯策治。

那實(shí)際開(kāi)發(fā)環(huán)境中也可以測(cè)試通惫,為什么還麻煩寫(xiě)單元測(cè)試呢?

因?yàn)榇蟛糠珠_(kāi)發(fā)人員覺(jué)得寫(xiě)測(cè)試代碼很“浪費(fèi)”時(shí)間珊燎,而且還需要后期的維護(hù)遵湖。如果沒(méi)從根本上認(rèn)識(shí)它的好處,往往是開(kāi)頭容易谋国,堅(jiān)持難(這一點(diǎn)生活中好多都是這樣迁沫,跑步集畅,減肥等)。

那么單元測(cè)試到底有哪些好處呢藐吮?

先看實(shí)際開(kāi)發(fā)環(huán)境做不到或做不好的方面開(kāi)始:

耦合性強(qiáng)

因?yàn)閷?shí)際開(kāi)發(fā)環(huán)境會(huì)依賴一大堆的條件,測(cè)試一次需要從一個(gè)頁(yè)面跳到另一個(gè)頁(yè)面(或幾個(gè))迫摔,而且耦合性很強(qiáng)句占,前面一個(gè)頁(yè)面沒(méi)有完成纱烘,后面的頁(yè)面沒(méi)辦法測(cè)試。

一次只能測(cè)試一條case

因?yàn)槊看沃荒苓\(yùn)行一個(gè)流程擂啥,所以只能測(cè)試一條case哺壶,多個(gè)出錯(cuò)的條件以及多個(gè)分支必須跑多次才能測(cè)試到山宾。

代碼質(zhì)量無(wú)法保證

一個(gè)team多人開(kāi)發(fā)的時(shí)候,你無(wú)法保證整個(gè)team的代碼質(zhì)量资锰,也沒(méi)有判斷的標(biāo)準(zhǔn)绷杜。試想接剩,當(dāng)領(lǐng)導(dǎo)問(wèn)你說(shuō)萨咳,“這個(gè)project的代碼質(zhì)量怎么樣培他?”遗座,你只能傻眼途蒋。如果你說(shuō)好還是不好,領(lǐng)導(dǎo)都覺(jué)得你在說(shuō)空話(其實(shí)你自己往往很糾結(jié),說(shuō)好吧梯醒,出bug了茸习,領(lǐng)導(dǎo)會(huì)說(shuō)壁肋,你看某某某就能說(shuō)空話;說(shuō)不好吧猫胁,那公司養(yǎng)你有什么用弃秆。)察净。

其實(shí)領(lǐng)導(dǎo)想聽(tīng)到的是數(shù)據(jù)而不是你的猜想,因?yàn)樯钍蔷唧w的锈至,需要用數(shù)據(jù)來(lái)說(shuō)話的峡捡!

任務(wù)分工困難

如果一個(gè)功能測(cè)試需要依賴其他人的功能筑悴,那么對(duì)于一個(gè)team的任務(wù)分工太難了。

單元測(cè)試可以解決上面的問(wèn)題嗎砚婆?

回答是肯定的突勇!

除了上面都可以解決,而且還有額外的好處埂奈,下面看看還有哪些額外的好處账磺?

提高代碼質(zhì)量

因?yàn)橐獙?xiě)每個(gè)分支的測(cè)試用例,所以寫(xiě)出的代碼接口更抽象氏捞,考慮到的case更多幌衣。即使是命名壤玫,也會(huì)比平時(shí)多加思考,而不是簡(jiǎn)單的隨意取名楚里,后面覺(jué)得不合適班缎,再去修改达址。

大膽得去重構(gòu)

重構(gòu)代碼會(huì)經(jīng)常做趁耗,但是大部分人會(huì)遇到苛败,如果明天要發(fā)布版本了罢屈,今天該做的重構(gòu)可能就不會(huì)做了缠捌,怕影響發(fā)布。但是如果有單元測(cè)試肃叶,你完全可以按照計(jì)劃大膽的去做十嘿。這樣代碼質(zhì)量可以時(shí)刻保證绩衷。

如何確定一個(gè)API是否合適使用

根據(jù)單元測(cè)試的每一種case

判斷它的覆蓋面

判斷它的健壯性

判斷它的代碼質(zhì)量

判斷它是否達(dá)到更高的抽象

使用者往往不需要看代碼的實(shí)現(xiàn)咳燕,單元測(cè)試可以完整表達(dá)它所具備的功能(如果不可以,說(shuō)明覆蓋面差)

而且現(xiàn)在的測(cè)試框架尤其是BDD低缩,行為驅(qū)動(dòng)測(cè)試咆繁,測(cè)試的case看起來(lái)就像讀一段文字似的玩般,這樣別人通過(guò)看你的測(cè)試case就大概能了解你的接口的功能是什么礼饱。

如何去做Javascript單元測(cè)試

現(xiàn)在有很多測(cè)試的框架镊绪,如Jasmine蝴韭。

現(xiàn)在有很多的自動(dòng)化測(cè)試工具万皿,如Karma牢硅。

對(duì)于前端,除了單元測(cè)試還有頁(yè)面的交互測(cè)試工具综苔,如Selenium

光有測(cè)試還不行如筛,需要有覆蓋率杨刨,這個(gè)也有工具妖胀,如Istanbul

測(cè)試場(chǎng)景設(shè)想

前面描述了這么多好處赚抡,又有這么多的測(cè)試工具爬坑,真的有這么多好處嗎?

下面是一個(gè)項(xiàng)目測(cè)試場(chǎng)景的設(shè)想或設(shè)計(jì):

為新工程搭建測(cè)試環(huán)境

一個(gè)新的工程涂臣,搭建測(cè)試框架盾计,搭建自動(dòng)化測(cè)試工具,搭建覆蓋率檢測(cè)工具赁遗,為代碼編寫(xiě)單元測(cè)試署辉。

git server運(yùn)行自動(dòng)化測(cè)試工具

在一個(gè)git server機(jī)器,運(yùn)行自動(dòng)化測(cè)試工具吼和,一直在檢測(cè)如master分支的變化涨薪。

代碼測(cè)試覆蓋率范圍設(shè)定

覆蓋率可以設(shè)置覆蓋的范圍,如90%表示通過(guò)(當(dāng)然100%最好炫乓,但是做到完美不容易,暫且使用90%)辨萍,<90%表示不通過(guò)邦邦。

自動(dòng)檢測(cè)

當(dāng)team中的member提交代碼到此git分支下鬼店,自動(dòng)化工具會(huì)自動(dòng)編譯并運(yùn)行巍棱,同時(shí)給出一個(gè)報(bào)告說(shuō)明是否所有的測(cè)試用例都通過(guò)了。

還會(huì)給出覆蓋率的報(bào)告生成倒得,如果達(dá)到了之前設(shè)定的覆蓋率的范圍讹躯,就說(shuō)明通過(guò),否則就是不通過(guò)。

員工能力的提高

如有的員工經(jīng)常提交代碼都會(huì)出現(xiàn)測(cè)試用例不通過(guò),或者是覆蓋率沒(méi)達(dá)標(biāo),幾次下來(lái),老板不說(shuō),自己也會(huì)補(bǔ)血了熔恢。

員工和領(lǐng)導(dǎo)的信任度提高

作為員工耗啦,是不是現(xiàn)在就不會(huì)出現(xiàn)上面說(shuō)到的領(lǐng)導(dǎo)問(wèn)你代碼質(zhì)量時(shí)的尷尬和糾結(jié),而是拍拍胸脯說(shuō)“質(zhì)量過(guò)關(guān)”获黔。

作為領(lǐng)導(dǎo),你看到這樣的代碼質(zhì)量,是不是會(huì)更放心的把任務(wù)交給自己的員工,也會(huì)對(duì)項(xiàng)目有更好的把握。

你是否感覺(jué)代碼的單元測(cè)試就像人類的免疫系統(tǒng)呢?

如果是忘古,那么接下來(lái)讓我們一起給我們的代碼建立一套免疫系統(tǒng)吧干旁!

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翔试,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子志秃,更是在濱河造成了極大的恐慌碑定,老刑警劉巖六敬,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歧匈,死亡現(xiàn)場(chǎng)離奇詭異口糕,居然都是意外死亡超棺,警方通過(guò)查閱死者的電腦和手機(jī)适肠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)从媚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人望抽,你說(shuō)我怎么就攤上這事〖危” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵剥哑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)八回,這世上最難降的妖魔是什么溶浴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任酵熙,我火速辦了婚禮驰坊,結(jié)果婚禮上匾二,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好察藐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布皮璧。 她就那樣靜靜地躺著,像睡著了一般转培。 火紅的嫁衣襯著肌膚如雪恶导。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天浸须,我揣著相機(jī)與錄音惨寿,去河邊找鬼。 笑死删窒,一個(gè)胖子當(dāng)著我的面吹牛裂垦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肌索,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蕉拢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了诚亚?” 一聲冷哼從身側(cè)響起晕换,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎站宗,沒(méi)想到半個(gè)月后闸准,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梢灭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年夷家,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敏释。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡库快,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钥顽,到底是詐尸還是另有隱情义屏,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布耳鸯,位于F島的核電站湿蛔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏县爬。R本人自食惡果不足惜阳啥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望财喳。 院中可真熱鬧察迟,春花似錦斩狱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至概荷,卻和暖如春秕岛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背误证。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工继薛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人愈捅。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓遏考,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蓝谨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灌具,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容