在Gogland里對GO程序進行單元測試!


單元測試在程序開發中具有很重要的作用!

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 string
	Name 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+input2

	return temp
}

structFunc_test.go : 這是上面的單元測試程序,僅僅測試"StructFunc"函數。

package mydata

import (
	"testing"
)

//StructFunc的測試方法
func TestStructFunc(t *testing.T) {

	//聲明結構函數輸入的變量
	var (
		idIn   string
		nameIn string
	)

	//給結構函數輸入的變量賦值
	idIn = "inputId"
	nameIn = "inputName"

	//得到結構
	ts := &TestStruct{}

	//調用結構函數1
	idOut, 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM