最近在學(xué)習(xí)Go
娶靡。然后不禁想感嘆,為什么有些小伙伴的Go
測(cè)試可讀性可以這么怪(cha)揖膜。說(shuō)好的測(cè)試即文檔呢誓沸?說(shuō)好的測(cè)試邊界呢?說(shuō)好的Given When Then
呢壹粟?是我功力不行嗎拜隧?
我一直相信,編程思想或說(shuō)方法論都屬于可遷移的知識(shí)趁仙,不管在哪種語(yǔ)言體內(nèi)洪添。可是看完一些 Go
的測(cè)試?yán)踝尤阜眩议_(kāi)始慌了~
理想與現(xiàn)實(shí)
不信干奢?看官請(qǐng)看:
go-test-bad.png
由于測(cè)試用例太長(zhǎng),沒(méi)法截全盏袄。沒(méi)錯(cuò)忿峻,太長(zhǎng),一屏都裝不下辕羽。好奇的你逛尚,請(qǐng)戳 ->>> 戳我
不知道你品起來(lái)如何,反正我品起來(lái)著實(shí)有點(diǎn)苦澀刁愿。
這樣的栗子绰寞,在awesome-go
列表的開(kāi)源庫(kù),還不少。不行滤钱,不行觉壶,不能被帶歪了(PS: GitHub 的確是全球最大的基友社區(qū)啊,容易帶歪人件缸,hahaha)铜靶。
插播一條:多品整潔,簡(jiǎn)單的代碼停团,有利于保護(hù)發(fā)際線(xiàn)旷坦。
當(dāng)然不能“一棒子打死船人”,要有發(fā)現(xiàn)美的眼睛佑稠∶朊罚看官請(qǐng)看:
go-test-good.png
這是大神TJ Holowaychuk
寫(xiě)的,果然不同凡響舌胶。好奇的你捆蜀,請(qǐng)戳 ->>> 戳我
落地夢(mèng)想
滿(mǎn)足什么條件的測(cè)試,是值得品味的幔嫂?我覺(jué)得辆它,第一是可讀性
,第二還是可讀性
履恩,第三還是可讀性
锰茉。
常聽(tīng)說(shuō) 測(cè)試即文檔,那么問(wèn)題來(lái)了切心,好讀的文檔飒筑,長(zhǎng)啥樣?讀小學(xué)的時(shí)候绽昏,老師就有教導(dǎo)說(shuō)协屡,寫(xiě)作文要,結(jié)構(gòu)清晰全谤,中心思想突出!!!
寫(xiě)測(cè)試代碼也是如此肤晓,要寫(xiě)出她(計(jì)算機(jī))能理解的“文章”,也要寫(xiě)出我們能品的“文章”认然。那么补憾,落地BDD
模式的測(cè)試,無(wú)疑是種好的選擇卷员。
看官請(qǐng)看:
bdd.png
中心思想突出余蟹,結(jié)構(gòu)清晰。開(kāi)頭先描述主要功能子刮,然后根據(jù)不同用例場(chǎng)景分別對(duì)待描述。
落地的栗子:
bdd-test.png
有木有看起來(lái)很舒服!Mο俊葵孤!你是不是在想,測(cè)試實(shí)現(xiàn)代碼呢橱赠?看官您接著看:
bdd-given-when-then.png
完整栗子尤仍,好奇的你,請(qǐng)戳 ->>> 戳我
上面的栗子狭姨,落地就是測(cè)試三段式宰啦,GIVE-WHEN-THEN
:
given-when-then.png
- Given: set up context for a behaviour
- When: specify some action
- Then: specify some outcome
Action + Outcome = Behaviour
,行為是測(cè)試關(guān)注的核心饼拍。Given
赡模,測(cè)試用例業(yè)務(wù)場(chǎng)景的準(zhǔn)備,主要包含準(zhǔn)備業(yè)務(wù)數(shù)據(jù)师抄、Mock 外部依賴(lài)漓柑、準(zhǔn)備用戶(hù)信息。 隨著業(yè)務(wù)的越復(fù)雜叨吮,測(cè)試上下文的準(zhǔn)備也會(huì)越來(lái)與復(fù)雜辆布,準(zhǔn)備業(yè)務(wù)數(shù)據(jù)的過(guò)程也會(huì)越來(lái)越耗時(shí)間。舉個(gè)栗子茶鉴,對(duì)于API
測(cè)試來(lái)說(shuō)锋玲,相對(duì)需要花時(shí)間寫(xiě)的就是Given
的過(guò)程。Then
涵叮,主要是寫(xiě)斷言惭蹂,Assert
一下API
的返回?cái)?shù)據(jù),When
围肥,觸發(fā)的動(dòng)作剿干,就是簡(jiǎn)單的發(fā)一下請(qǐng)求,調(diào)用一下API
穆刻。
在插播一條:如何解決 Given
編寫(xiě)耗時(shí)的問(wèn)題置尔,DSL Fixture
了解一下。
寫(xiě)在最后
coffee.jpeg
咖啡喝完了氢伟,接下來(lái)我也不知道怎么寫(xiě)了榜轿,點(diǎn)到為止吧,因?yàn)楹竺娴奈乙膊粫?huì)啊...