問題
StackOverflow上有一則是否使用TDD(測(cè)試驅(qū)動(dòng)開發(fā))進(jìn)行UI開發(fā) 的提問。
JacobE問:
對(duì)于是否使用TDD進(jìn)行開發(fā)UI這件事,我想了很久,但難以決定。我想聽聽你們的意見。
回答
kdgregory的回答(23票贊同)
試圖測(cè)試UI組件的放置是沒有意義的,首先因?yàn)閁I布局是主觀的,所以應(yīng)該由人來測(cè)試。其次,隨著UI改動(dòng),你要不斷地重寫測(cè)試。
同樣,沒必要測(cè)試你所使用GUI庫的組件,它們已經(jīng)被非常多的人測(cè)試過了。如果你寫了新的UI組件,倒是可以測(cè)一測(cè)。
你應(yīng)該測(cè)試的是GUI下面的程序行為:控制器和模型部分。朝這個(gè)方向努力,你就會(huì)開始關(guān)心組件分離。為了方便測(cè)試,你會(huì)讓你的模型部分和控制器和你的UI盡量解耦。
bangroot的回答(8票贊同)
當(dāng)我使用自動(dòng)化測(cè)試去測(cè)試UI的外觀風(fēng)格時(shí),我發(fā)現(xiàn)這是最大的“過度工程”。我的建議是:不要!把你的測(cè)試重心轉(zhuǎn)移到程序的行為上吧,至于程序的UI,留給測(cè)試團(tuán)隊(duì)去做吧。關(guān)鍵是把你的精力用在高收益的行為上,自動(dòng)化的UI測(cè)試不僅不會(huì)增加價(jià)值,還會(huì)讓你負(fù)債!
Brian Rasmussen的回答(5票贊同)
TDD的作用就是讓你的邏輯代碼和你的GUI代碼分離。如果你這樣做了,你會(huì)發(fā)現(xiàn)很容易用TDD建立邏輯代碼。如果你的邏輯代碼分離得好,在它之上你完全可以建立另一套UI。
Harald Scheirich(4票贊同)
我從來不用TDD做任何UI布局的事情,因?yàn)榛ǖ臅r(shí)間太不值。
后面的解答不一一列舉。
結(jié)論
關(guān)于這個(gè)問題的回答基本是一邊倒的結(jié)論:沒必要把精力放在UI的自動(dòng)化測(cè)試上。原因可歸結(jié)為以下兩點(diǎn):
- 不合理?!耙?yàn)閁I布局是主觀的,所以應(yīng)該由人來測(cè)試。”
- 不劃算。對(duì)于UI的自動(dòng)化測(cè)試,要花費(fèi)很大的努力和很多的時(shí)間,隨著UI改動(dòng),測(cè)試也要改動(dòng)。工作量太大。明顯不如由人來測(cè)試UI劃算。
根據(jù)以上的討論,我的結(jié)論是:
- TDD是輔助設(shè)計(jì)的一種方法,但不是唯一的方法。當(dāng)我做UI布局時(shí),寫CSS時(shí),沒必要TDD。
- TDD應(yīng)該針對(duì)程序的行為,而不是程序的外觀。TDD的目標(biāo)寫出依賴盡量少的,方便測(cè)試的功能模塊。
2015-02-12 周四
如果你喜歡我的文章,可以點(diǎn) 這里 給我打賞,五分一毛也是對(duì)我的認(rèn)同。