



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第第頁(yè)在Go語(yǔ)言中如何進(jìn)行單元測(cè)試注意:這里假定您的Sum()函數(shù)在一個(gè)名為testing101的包中。如果您在本地自己編寫代碼,記得導(dǎo)入正確的包。
如果我們運(yùn)行此代碼,會(huì)注意到Sum()函數(shù)實(shí)際上沒(méi)有按預(yù)期的方式工作,我們沒(méi)有得到期望的值:10,而是得到6。進(jìn)一步排查后,我們可能會(huì)意識(shí)到,我們使用的是在切片中的索引,而不是切片中每個(gè)項(xiàng)的實(shí)際值。為了解決這個(gè)問(wèn)題,我們需要更新該行:
forn:=rangenumbers{現(xiàn)在我們要運(yùn)行我們的測(cè)試,所以在終端中切換到testing101包所在目錄,并使用下面的命令運(yùn)行測(cè)試。
gotest-v每個(gè)函數(shù)多個(gè)測(cè)試用例此示例使用了一個(gè)閉包,它是一個(gè)函數(shù),它使用了沒(méi)有直接傳遞給它的變量(外部函數(shù)的變量)。這對(duì)于創(chuàng)建一個(gè)只接受testing.T變量的函數(shù)很有用,而且也可以訪問(wèn)我們要為每個(gè)測(cè)試用例動(dòng)態(tài)定義的變量。如果你不知道什么是閉包,我建議你看看stackoverflow上的這個(gè)問(wèn)題,如果這還幫助不了你,你可以發(fā)送電子郵件給我(jon@calhoun.io),我會(huì)嘗試寫一篇關(guān)于閉包的文章。
通過(guò)使用閉包,我們可以在測(cè)試中動(dòng)態(tài)地設(shè)置變量,而不需要一次又一次地編寫相同的代碼?,F(xiàn)在,如果我們使用gotest-v運(yùn)行我們的測(cè)試,我們將得到以下輸出:
===RUNTestSum
===RUNTestSum/[1,2,3,4,5]
===RUNTestSum/[1,2,3,4,-5]
PASS:TestSum(0.00s)
PASS:TestSum/[1,2,3,4,5](0.00s)
PASS:TestSum/[1,2,3,4,-5](0.00s)
PASS
okcalhoun.io/testing1010.005s
這些測(cè)試現(xiàn)在用它們的輸入做了標(biāo)記,并且嵌套在TestSum測(cè)試用例下,使得調(diào)試任何問(wèn)題都非常容易做到。
譯注:還有一種選擇其實(shí)更常用,那就是表格測(cè)試。
示例作為測(cè)試
幾乎所有開(kāi)發(fā)人員的目標(biāo)之一就是編寫易于使用和維護(hù)的代碼。為了實(shí)現(xiàn)這一點(diǎn),包含如何使用代碼的示例通常會(huì)有所幫助。Go的testing包提供了幫助定義示例源代碼的功能。作為附加的用途,testing包還可以測(cè)試您的示例,以確保它們?cè)跍y(cè)試過(guò)程中輸出您期望的內(nèi)容。
打開(kāi)sum_test.go,在文件末尾增加如下代碼:
funcExampleSum(){numbers:=[]int{5,5,5}fmt.Println(Sum(numbers))//Output://15}然后使用gotest-v運(yùn)行測(cè)試。您現(xiàn)在應(yīng)該在結(jié)果中看到此示例函數(shù),但它是如何被測(cè)試的呢?
Go使用在ExampleXxx()函數(shù)底部的"Output解釋'部分來(lái)確定預(yù)期的輸出是什么,然后在運(yùn)行測(cè)試時(shí),它將實(shí)際輸出與解釋中的預(yù)期輸出進(jìn)行比較,如果不匹配,將觸發(fā)失敗的測(cè)試。這樣,我們可以同時(shí)編寫測(cè)試和示例代碼。
除了創(chuàng)建用于測(cè)試的示例外,示例還用于顯示在生成的文檔中。例如,上面的例子可以用來(lái)為我們的testing101包生成文檔,類似下面的截圖。
更復(fù)雜的例子
在測(cè)試足夠的代碼和編寫足夠的示例之后,您最終會(huì)發(fā)現(xiàn)某些測(cè)試在單個(gè)函數(shù)中不容易編寫。發(fā)生這種情況的一個(gè)常見(jiàn)原因是,您需要在多次測(cè)試之前或之后設(shè)置(setup)或拆卸(teardown)東西。例如,您可能希望從環(huán)境變量獲?。〝?shù)據(jù)庫(kù))URL,并在運(yùn)行多個(gè)測(cè)試之前設(shè)置到(數(shù)據(jù)庫(kù))的連接,而不是單獨(dú)為每個(gè)測(cè)試重新連接到數(shù)據(jù)庫(kù)。
為支持該功能,Go提供了TestMain(*testing.M)的函數(shù),它在需要的時(shí)候代替運(yùn)行所有的測(cè)試。使用TestMain()函數(shù)時(shí),您有機(jī)會(huì)在測(cè)試運(yùn)行之前或之后插入所需的任何自定義代碼,但唯一需要注意的是必須處理flag解析并使用測(cè)試結(jié)果調(diào)用os.Exit()。這聽(tīng)起來(lái)可能很復(fù)雜,但實(shí)際上只有兩行代碼。
flag.Parse()os.Exit(m.Run())讓我們看一個(gè)更完整的例子。在我們的testing101包中,創(chuàng)建一個(gè)名為db_test.go的文件,并將下面的代碼添加到其中。
packagetesting101import(flagfmtostesting)vardbstruct{Urlstring}funcTestMain(m*testing.M){//PretendtoopenourDBconnectiondb.Url=os.Getenv(DATABASE_URL)ifdb.Url=={db.Url=localhost:5432}flag.Parse()exitCode:=m.Run()//PretendtocloseourDBconnectiondb.Url=//Exitos.Exit(exitCode)}funcTestDatabase(t*testing.T){//Pretendtousethedbfmt.Println(db.Url)}在這段代碼中,我們首先創(chuàng)建一個(gè)名為db的全局變量,它是一個(gè)包含Url的結(jié)構(gòu)體。通常,這將是一個(gè)實(shí)際的數(shù)據(jù)庫(kù)連接,但對(duì)于這個(gè)例子,我們只是示例,只設(shè)置了Url。
接下來(lái)在TestMain()中,我們假裝通過(guò)分析環(huán)境變量DATABASE_URL并將其設(shè)置為db.Url屬性來(lái)打開(kāi)數(shù)據(jù)庫(kù)連接。如果這是一個(gè)空字符串,則默認(rèn)為localhost:5432,Postgres使用的默認(rèn)端口。
之后我們解析標(biāo)志(這樣我們的gotest-v中的-v選項(xiàng)可以工作),調(diào)用m.Run()并將結(jié)果狀態(tài)碼存儲(chǔ)在exitCode中,以便在結(jié)束測(cè)試時(shí)可以引用它。如果你對(duì)退出狀態(tài)代碼不太了解,現(xiàn)在就不重要了。只需記住,我們需要存儲(chǔ)從m.Run()返回的狀態(tài)碼,以后再使用它。
在運(yùn)行測(cè)試后,我們假裝通過(guò)將db.Url屬性設(shè)置為空字符串來(lái)關(guān)閉數(shù)據(jù)庫(kù)連接。
最后,我們使用os.Exit(exitCode)退出。這將導(dǎo)致當(dāng)前程序(我們正在運(yùn)行的測(cè)試)使用我們提供的狀態(tài)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中考語(yǔ)文一輪復(fù)習(xí):應(yīng)用文 練習(xí)題(含答案)
- 電梯清洗抱閘施工方案
- 2025年中考語(yǔ)文寫作復(fù)習(xí):備考作文主題《山花爛漫時(shí)》演繹張桂梅的“燃燈精神”
- 石材露臺(tái)改造施工方案
- 市政防滑路面施工方案
- 2025年法律援助測(cè)試題及答案
- 低介電常數(shù)聚酰亞胺
- 4年級(jí)下冊(cè)英語(yǔ)手抄報(bào)1到5單元
- 4-庚氧基-1-丁醇用途
- 鋼塑門施工方案
- 有機(jī)金屬化學(xué)1
- JIT標(biāo)準(zhǔn)作業(yè)作業(yè)指導(dǎo)書(shū)
- 土壤固化土施工技術(shù)導(dǎo)則
- VAR模型Johansen協(xié)整檢驗(yàn)在eviews中的具體操作步驟及結(jié)果解釋
- 冷凍面團(tuán)項(xiàng)目市場(chǎng)分析
- 混凝土面板堆石壩接縫止水
- 加油站法律法規(guī)符合性評(píng)價(jià)
- 5外科--丹毒下肢丹毒中醫(yī)診療方案2017年版
- 錨索錨桿計(jì)算表格(含下滑力及錨桿錨索受力及伸長(zhǎng)值計(jì)算)
- 數(shù)學(xué)物理方法第十一章PPT課件
- (完整版)漢字偏旁部首名稱表最新(精華版)
評(píng)論
0/150
提交評(píng)論