精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

Bob Martin:逆變測(cè)試

責(zé)任編輯:editor004

作者:Andrew Morgan

2017-10-17 12:16:09

摘自:INFOQ

Martins解釋說,當(dāng)測(cè)試代碼與生產(chǎn)代碼緊密耦合時(shí),如果不重新編寫測(cè)試,那么任何重構(gòu)幾乎都是不可能的。他強(qiáng)調(diào): 

Bob Martin是敏捷宣言的制定者之一。他發(fā)表了一篇博文,概述編寫協(xié)變結(jié)構(gòu)的測(cè)試和代碼存在的陷阱。本質(zhì)上,他強(qiáng)調(diào)的是,在設(shè)計(jì)測(cè)試結(jié)構(gòu)時(shí)應(yīng)該采用逆變方式,將其從生產(chǎn)代碼中解耦,從而得到一個(gè)健壯性更好、重構(gòu)更容易的代碼庫(kù)。

人們?cè)陂_始使用TDD時(shí),經(jīng)常遇到的一個(gè)問題是測(cè)試脆弱性問題。Martins解釋說,當(dāng)測(cè)試代碼與生產(chǎn)代碼緊密耦合時(shí),如果不重新編寫測(cè)試,那么任何重構(gòu)幾乎都是不可能的。他強(qiáng)調(diào):

測(cè)試的結(jié)構(gòu)不必反映生產(chǎn)代碼的結(jié)構(gòu),因?yàn)檫^度耦合讓系統(tǒng)脆弱,而且妨礙重構(gòu)。相反,測(cè)試結(jié)構(gòu)必須獨(dú)立設(shè)計(jì),從而最小化與生產(chǎn)代碼的耦合。

為了進(jìn)一步說明這個(gè)測(cè)試脆弱性問題,Martin指出,這經(jīng)常是不理解什么是重構(gòu)導(dǎo)致的:“重構(gòu)被定義為一個(gè)包含一系列小變更的序列,可以保證測(cè)試總是可以通過”。將測(cè)試耦合到生產(chǎn)代碼,而不注重測(cè)試其行為,重構(gòu)就變成不可能了。

Martin寫道,這種協(xié)變結(jié)構(gòu)還源自對(duì)TDD的誤解。人們通常認(rèn)為,每個(gè)類都應(yīng)該有一個(gè)測(cè)試類,然而,實(shí)際上,它們應(yīng)該有自己的結(jié)構(gòu)。畢竟,我們測(cè)試的是應(yīng)用程序行為,而不是代碼結(jié)構(gòu)。

Martin解釋說,雖然開始的時(shí)候類和測(cè)試之間可能存在直接的對(duì)應(yīng)關(guān)系,但隨著開發(fā)進(jìn)行會(huì)自然分開。他舉的第一個(gè)例子是,將公有方法中的代碼提取到私有方法中。應(yīng)用程序行為測(cè)試的覆蓋率不會(huì)變,但引入了沒有直接測(cè)試的方法。如果這些代碼被提取到類中,該規(guī)則同樣適用;不需要?jiǎng)?chuàng)建新的測(cè)試類,因?yàn)樗械男袨槎际峭ㄟ^原來的測(cè)試進(jìn)行測(cè)試。

Martin寫道,久而久之,隨著開發(fā)進(jìn)行,越來越多的測(cè)試加入進(jìn)來,每個(gè)測(cè)試都測(cè)試一種具體的應(yīng)用程序行為。隨著完整規(guī)范的建立,為了容納所有必要的行為,應(yīng)用程序代碼自然變得越來越泛化。換句話說,生產(chǎn)代碼應(yīng)該總是越來越泛化,而測(cè)試代碼應(yīng)該越來越具體。這就促進(jìn)了解耦,這樣就是逆變:

隨著測(cè)試變得越來越具體,生產(chǎn)代碼變得越來越泛化。兩個(gè)代碼流沿著泛化軸向著相反的方向演化,直到?jīng)]有新的沉降試驗(yàn)可以編寫。

要閱讀完整的博文,請(qǐng)點(diǎn)擊這里。

查看英文原文:Bob Martin: Test Contra-Variance

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)

  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 如东县| 永吉县| 罗源县| 西充县| 松滋市| 金昌市| 镇沅| 皮山县| 精河县| 比如县| 南靖县| 阳城县| 花垣县| 辽阳县| 阳江市| 江华| 铜陵市| 隆回县| 叙永县| 曲松县| 苏尼特左旗| 当阳市| 华池县| 宁城县| 木兰县| 嵊泗县| 扶余县| 扎赉特旗| 武陟县| 万年县| 汪清县| 博乐市| 团风县| 芜湖市| 高台县| 洛阳市| 万盛区| 汾西县| 瑞昌市| 淮滨县| 三亚市|