這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
單元測試在程式開發中具有很重要的作用!
1,可以保證程式碼的健壯,能夠最小範圍測試程式碼,從而保證程式的正確性!
2,可以通過單元測試代碼快速瞭解當前的程式。
我在先前的幾個軟體公司工作時候,都對程式碼進行單元測試,一般來說經過單元測試的程式品質都很好!!現在我使用Gogland來學習GO語言,同時也想用它來開發GO語言程式,那麼如何在在Gogland裡編寫GO程式的單元測試呢?
一,GO語言為我們準備好了測試架構!
單元測試檔案的執行需要單元測試架構,GO語言已經為我們準備好了,Go語言中內建有一個輕量級的測試架構testing,可以使用"go test"命令來實現單元測試和效能測試!無須進行任何其它安裝或配置,我們就可以編寫GO程式的單元測試程式了!!
二,GO語言的單元測試程式應該放到哪裡?
我看到很多文章說GO語言的測試程式應該放到一個統一的目錄中,但是實際上並不需要那樣做。你可以把GO語言的單元測試檔案放到任意你想放的地方!!!
一般單元測試檔案程式都是隨著程式的開發同步編寫,一個功能結束後,就應該編寫單元測試檔案了,而且還有一點,一個單元測試檔案中可能會包含多個單元測試方法,我們通常不會全部執行這個單元測試檔案中的所有單元測試方法。以我以往的編寫單元測試程式的經驗來說,通常都是單獨執行一個單元測試檔案的某個單元測試方法!!在這樣的情況下,單元測試檔案存放到什麼地方都無所謂,只要能夠正常執行需要測試的單元測試檔案和單元測試方法就可以了!!!
三,在Gogland中編寫單元測試程式。
在正式編寫單元測試檔案之前,我們應該記住這些GO語言單元測試檔案的編寫規則!!
- 檔案名稱必須是_test.go結尾的,這樣在執行go test的時候才會執行到相應的代碼
- 你必須import testing這個包
- 所有的測試案例函數必須是Test開頭
- 測試案例會按照原始碼中寫的順序依次執行
- 測試函數TestXxx()的參數是testing.T,我們可以使用該類型來記錄錯誤或者是測試狀態
- 測試格式:func TestXxx (t *testing.T),Xxx部分可以為任意的字母數位組合,但是首字母不能是小寫字母[a-z],例如Testintdiv是錯誤的函數名。
- 函數中通過調用testing.T的Error, Errorf, FailNow, Fatal, FatalIf方法,說明測試不通過,調用Log方法用來記錄測試的資訊。
下面是被測試檔案和單元測試檔案代碼:
structFunc.go : 這是要被測試的程式檔案,我想對"StructFunc"函數進行單元測試,這個函數是這個程式檔案中的一個!
package mydata//自訂的結構,首字母大寫可以被匯出,包括裡面的欄位首字母大寫才被輸出type TestStruct struct {Id stringName string}//這是一個結構函數,返回兩個值,輸入為方法接收者func (ts *TestStruct) StructFunc (idIn,nameIn string) (idOut,nameOut string){ts.Id=idIn;ts.Name=nameIn;return ts.Id,ts.Name}//這是另外一個結構函數,返回結構,輸入為方法接收者func (ts *TestStruct) StructFunc2 (idIn,nameIn string) TestStruct{ts.Id=idIn;ts.Name=nameIn;return *ts}//這是普通函數,函數名前面沒有方法接收者func OrdinaryFunc (input1,input2 string) (outPut string){temp:=input1+input2return temp}
structFunc_test.go : 這是上面的單元測試程式,僅僅測試"StructFunc"函數。
package mydataimport ("testing")//StructFunc的測試方法func TestStructFunc(t *testing.T) {//聲明結構函數輸入的變數var (idIn stringnameIn string)//給結構函數輸入的變數賦值idIn = "inputId"nameIn = "inputName"//得到結構ts := &TestStruct{}//調用結構函數1idOut, nameOut := ts.StructFunc(idIn, nameIn)if idOut==idIn&&nameOut==nameIn{t.Log("測試通過!")}else{t.Error("函數執行錯誤")}}
四,在Gogland中隨意執行任意單元測試方法。
在任意一個單元測試檔案中的任意一個單元測試方法,都應該可以被單獨執行,在Gogland確實可以這樣做!!!
1,開啟要執行測試的單元測試程式,隨後有滑鼠左鍵選中要執行測試的測試方法。
2,在選中的單元測試方法上面滑鼠右鍵,隨後在快顯功能表中執行對應命令。
3,這是執行單元測試方法後的,表明當前被測試方法完全正確,通過對它的單元測試了!
4,對其它單元測試方法,同樣用滑鼠右鍵,在快顯功能表中執行對應命令就可以了。下面是我對新增的一個單元測試方法進行的單元測試。
5,我們可以把單元檔案存放到任意位置執行,我把上面的單元測試檔案拷貝到"mydata"包中進行單元測試,一樣順利進行了單元測試,下面是:
一點建議:雖然我們可以把單元測試程式放到任意地方,不過為了維護方便,我還是建議存放到一個固定位置,我把我所有的單元測試程式都存放到”test“包中了!
參考:
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/11.3.md
http://blog.csdn.net/samxx8/article/details/46894587