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