真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

隱藏在mock之后的‘快感’-創(chuàng)新互聯(lián)

      最近某同事抱怨他們的測(cè)試難寫,經(jīng)?;ㄙM(fèi)在測(cè)試的時(shí)間比產(chǎn)品代碼更多,而且每次重構(gòu)后都必須修改一大堆的測(cè)試。和同事閑談后得知,在其項(xiàng)目中大量的使用了mock,或者說對(duì)mock的使用過度極端對(duì)所謂的單元測(cè)試“快速”,“獨(dú)立“的過度。 在前邊轉(zhuǎn)載過《軟件開發(fā)中沒有所謂正確的方法》,當(dāng)你把某一種方法論作為銀彈使用的時(shí)候,早晚魔鬼會(huì)伴隨在你身邊。

目前創(chuàng)新互聯(lián)公司已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、甘井子網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

    Mock給我?guī)砹烁兄?,剝離了類與類之間的依賴,有助于我們更好的工作在當(dāng)前的關(guān)注點(diǎn) .但同時(shí)由于太多的對(duì)場(chǎng)景的假設(shè),導(dǎo)致這塊代碼成為了信息的孤島,甚至很多時(shí)候不得不用mock的第二特性verify,order,以至于你的測(cè)試關(guān)心的不再是代碼存在的business邏輯,而傾向代碼層面的設(shè)計(jì)實(shí)現(xiàn),這就把你單元測(cè)試推向了“白盒測(cè)試“的位置,導(dǎo)致測(cè)試變?yōu)榇嗳醯臏y(cè)試。每當(dāng)簡單的重構(gòu)導(dǎo)致內(nèi)部的變化,你的測(cè)試也必須隨著改變。

    鄙人認(rèn)為作為一個(gè)好的測(cè)試而言,在一次合法的簡單重構(gòu)之下,是不需要修改測(cè)試的,因?yàn)槟阈薷牡闹皇莾?nèi)部實(shí)現(xiàn),而不是business的改變,如果你邊改測(cè)試邊重構(gòu)或者重構(gòu)后掛到一大堆測(cè)試,這意味這你的測(cè)試不是一個(gè)穩(wěn)定的測(cè)試或者你不是一次合法的重構(gòu)(也許redesign,override)。

    在同事的項(xiàng)目中對(duì)mock的極端到了對(duì)簡單的View Object 也采用builder模式,可是內(nèi)部卻全是mock given。在我看來而言View Object只是一個(gè)簡單的數(shù)據(jù)載體,不存在行為邏輯,我們毫無必要去做mock,mock該是針對(duì)假設(shè),而應(yīng)該盡量避免對(duì)狀態(tài)mock。在同事的項(xiàng)目中導(dǎo)致需要寫一個(gè)測(cè)試之前,作為測(cè)試的準(zhǔn)備given ,必須理解存在代碼的實(shí)現(xiàn),因?yàn)槟阈枰欢裧iven,比如對(duì)于person對(duì)象,如果你在實(shí)現(xiàn)中需要得到account則:

given(person.getAccount()).willReturn(some account);

    導(dǎo)致我需要了解實(shí)現(xiàn)需要什么property,如果我需要新的的property也許只是簡單的把某個(gè)“依戀情結(jié)”放入了object,測(cè)試也需要被修改,導(dǎo)致重構(gòu)者對(duì)自己的重構(gòu)并不那么自信,這將影響重構(gòu)成為日常行為,隨著堆積的”壞味道“這將一點(diǎn)一點(diǎn)的侵蝕你的代碼,項(xiàng)目慢慢的也許會(huì)不能的不可控。

    Mock并不是一個(gè)壞的東西,結(jié)果的好壞在于使用的人,團(tuán)隊(duì) 的意識(shí),如果是mock anywhere或者杜絕mock走向兩個(gè)任意的極端都將是一個(gè)錯(cuò)誤的抉擇。

    Mock更多的使用場(chǎng)景為對(duì)外界資源解依賴增強(qiáng)感知能力,以及對(duì)無響應(yīng)的重要business的驗(yàn)證,后者長體現(xiàn)于一個(gè)沒有返回子void的method,但是method比如增加用戶積分,記錄用戶信息等的。然而對(duì)于有響應(yīng)的business,我需要的不是mock而應(yīng)該是assert,對(duì)于測(cè)試來說對(duì)于business來說應(yīng)試是我的輸入應(yīng)該得到我預(yù)期的響應(yīng),而非我verify某個(gè)行為發(fā)生了,那么其結(jié)果一定就正確,當(dāng)然對(duì)于實(shí)現(xiàn)來說這是成立的,但是從測(cè)試的價(jià)值來說這廝無意義的,這將是一個(gè)脆弱的測(cè)試,我認(rèn)為一個(gè)好的測(cè)試將是“黑盒測(cè)試“,是一個(gè)business的描述,對(duì)一份約定,契約的闡述。

     附言,如果你因?yàn)闇y(cè)試的速度,獨(dú)立性來為自己的mock證明,那將是無意義的,不是每一個(gè)測(cè)試都必須在黃金法則內(nèi)(0.1s),如果你對(duì)外部依賴,耗時(shí)依賴的分離,這我相信將不再是問題所在,測(cè)試的優(yōu)化將是另一個(gè)有趣的話題,將不是本問內(nèi)容之列。


當(dāng)前標(biāo)題:隱藏在mock之后的‘快感’-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://weahome.cn/article/ddcjgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部