Go語言學(xué)習(xí)]之一:搭建單元測試環(huán)境
最近開始正式的學(xué)習(xí)Go語言,奉行我學(xué)習(xí)一項新技術(shù)的步驟和原則( 筆記 + 單元測試 + demo )。首先學(xué)習(xí)了開發(fā)環(huán)境的配置,并立即搭建了單元測試的環(huán)境,這樣可以一邊寫筆記,一邊進(jìn)行測試和學(xué)習(xí),從而加強(qiáng)理解。
這里簡單介紹Go中的測試環(huán)境搭建方法,大家可以參考著搭建并測試學(xué)習(xí)。
Go中的測試方式
Go語言中自帶有一個輕量級的測試框架(testing) 和 go test 命令來實現(xiàn)單元測試、性能測試 和 示例。一般來說,一個 xxx.go 文件對應(yīng)的 xxx_test.go 文件就是其對應(yīng)的單元測試文件,往往在同一個目錄下(參見 %GOROOT%\src\pkg 下的各文件)。
_test.go中有三種測試方式(具體可以參見 go help testfunc ):
1.單元測試, 代碼示例為: func TestXxx(t *testing.T) { 單元測試代碼, 通過 t.Error 等實現(xiàn)斷言 } 2.性能測試,代碼示例為: func BenchmarkXxx(b *testing.B) { for i := 0; i < b.N; i++ { 目標(biāo)代碼,會重復(fù)運(yùn)行N次 } } 3.示例 -- 代碼示例為: func ExampleXxx() { 示例語句,往標(biāo)準(zhǔn)輸出中輸出信息,然后下面會通過 Output 的注釋指明會輸出的文字,框架會進(jìn)行比較 //Output: 示例輸出 } |
針對本人的學(xué)習(xí)筆記需要,當(dāng)前情況下只使用單元測試來記錄各種學(xué)習(xí)筆記。
下面是我針對切片(Slice)的測試代碼,從中可以驗證文檔中說的一些重要信息,比如:可隨時動態(tài)增減元素,擴(kuò)充時會重新分配并復(fù)制內(nèi)存(類似于 std::vector) 等
func TestSlice(t *testing.T) { //從尾端向數(shù)組切片中追加元素 newIntSlice[0] = 99 newAddressIntSlice := append(intSlice, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) //方法2:先創(chuàng)建一個array,然后基于該array創(chuàng)建slice //下面代碼會在運(yùn)行時拋出"index out of range"的異常(panic) -- 因為該slice長度是5(即0~4) //在slice后追加slice,注意最后的三個點 //copy函數(shù),如兩個切片不一樣大,會按照較小的切片的元素個數(shù)進(jìn)行復(fù)制 |
最近開始正式的學(xué)習(xí)Go語言,奉行我學(xué)習(xí)一項新技術(shù)的步驟和原則( 筆記 + 單元測試 + demo )。首先學(xué)習(xí)了開發(fā)環(huán)境的配置,并立即搭建了單元測試的環(huán)境,這樣可以一邊寫筆記,一邊進(jìn)行測試和學(xué)習(xí),從而加強(qiáng)理解。
這里簡單介紹Go中的測試環(huán)境搭建方法,大家可以參考著搭建并測試學(xué)習(xí)。
Go中的測試方式
Go語言中自帶有一個輕量級的測試框架(testing) 和 go test 命令來實現(xiàn)單元測試、性能測試 和 示例。一般來說,一個 xxx.go 文件對應(yīng)的 xxx_test.go 文件就是其對應(yīng)的單元測試文件,往往在同一個目錄下(參見 %GOROOT%\src\pkg 下的各文件)。
_test.go中有三種測試方式(具體可以參見 go help testfunc ):
1.單元測試, 代碼示例為: func TestXxx(t *testing.T) { 單元測試代碼, 通過 t.Error 等實現(xiàn)斷言 } 2.性能測試,代碼示例為: func BenchmarkXxx(b *testing.B) { for i := 0; i < b.N; i++ { 目標(biāo)代碼,會重復(fù)運(yùn)行N次 } } 3.示例 -- 代碼示例為: func ExampleXxx() { 示例語句,往標(biāo)準(zhǔn)輸出中輸出信息,然后下面會通過 Output 的注釋指明會輸出的文字,框架會進(jìn)行比較 //Output: 示例輸出 } |
針對本人的學(xué)習(xí)筆記需要,當(dāng)前情況下只使用單元測試來記錄各種學(xué)習(xí)筆記。
下面是我針對切片(Slice)的測試代碼,從中可以驗證文檔中說的一些重要信息,比如:可隨時動態(tài)增減元素,擴(kuò)充時會重新分配并復(fù)制內(nèi)存(類似于 std::vector) 等
func TestSlice(t *testing.T) { //從尾端向數(shù)組切片中追加元素 newIntSlice[0] = 99 newAddressIntSlice := append(intSlice, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) //方法2:先創(chuàng)建一個array,然后基于該array創(chuàng)建slice //下面代碼會在運(yùn)行時拋出"index out of range"的異常(panic) -- 因為該slice長度是5(即0~4) //在slice后追加slice,注意最后的三個點 //copy函數(shù),如兩個切片不一樣大,會按照較小的切片的元素個數(shù)進(jìn)行復(fù)制 |