最近開始正式的學習go語言,奉行我學習一項新技術的步驟和原則( 筆記 + 單元測試 + demo )。首先學習了開發環境的配置,並立即搭建了單元測試的環境,這樣可以一邊寫筆記,一邊進行測試和學習,從而加強理解。
go語言中自帶有乙個輕量級的測試框架(testing) 和 go test 命令來實現單元測試、效能測試 和 示例。一般來說,乙個 ***.go 檔案對應的 ***_test.go 檔案就是其對應的單元測試檔案,往往在同乙個目錄下(參見 %goroot%\src\pkg 下的各檔案)。
_test.go中有三種測試方式(具體可以參見 go
help
testfunc ):
1.單元測試, **示例為:
func test***(t *testing.t)
2.效能測試,**示例為:
func benchmark***(b *testing.b)
}3.示例 -- **示例為:
func example***()
針對本人的學習筆記需要,當前情況下只使用單元測試來記錄各種學習筆記。
下面是我針對切片(slice)的測試**,從中可以驗證文件中說的一些重要資訊,比如:可隨時動態增減元素,擴充時會重新分配並複製記憶體(類似於 std::vector) 等。
func testslice(t *testing.t)
for idx := 0; idx < len(intslice); idx++
gounit_assert(t, len(intslice) == 10, "make建立的slice長度")
gounit_assert(t, cap(intslice) == 15, "make建立的slice容量")
//從尾端向陣列切片中追加元素
gounit_assert(t, cap(newintslice) == 15, "cap(newintslice) == 15")
gounit_assert(t, &newintslice[0] == &intslice[0], "底層的陣列是同乙個")
newintslice[0] = 99
gounit_assert(t, newintslice[0] == intslice[0], "未進行記憶體擴充的情況下新舊slice指向同乙個底層陣列")
gounit_assert(t, cap(newaddressintslice) == 30, "擴充後的長度,目前實現採用容量翻倍的方式")
newaddressintslice[0] = 199
gounit_assert(t, &newaddressintslice[0] != &intslice[0], "進行了記憶體擴充,底層陣列不再一樣")
gounit_assert(t, newaddressintslice[0] != intslice[0], "進行了記憶體擴充,底層陣列不再一樣")
//方法2:先建立乙個array,然後基於該array建立slice
intarray := [10]int
intslicefromarray := intarray[0:5] //[:]--基於全部元素, [5:]--從第5個元素開始的所有元素
gounit_assert(t, len(intslicefromarray) == 5, "array[n:m]建立的slice長度")
gounit_assert(t, cap(intslicefromarray) == 10, "array[n:m]建立的slice容量")
gounit_assert(t, cap(intarray) == 10, "陣列的容量")
//下面**會在執行時丟擲"index out of range"的異常(panic) -- 因為該slice長度是5(即0~4)
//intslicefromarray[5] = 10
//在slice後追加slice,注意最後的三個點
gounit_assert(t, len(s3) == 18 && cap(s3) == 30, "在slice後追加slice")
//copy函式,如兩個切片不一樣大,會按照較小的切片的元素個數進行複製
var news = make(int, 3)
ncopy := copy(news, intslice[0:5])
gounit_assert(t, ncopy == 3, "只複製3個元素")
}
補充說明:
1.gounit_assert 是自定義的函式,封裝了 testing.t 的操作,免得寫太多的**;
2.%goroot%\src\pkg 目錄下已有很多系統提供的單元測試,可以從中學到不少go語言庫的用法。
3.本人目前的liteide中各個測試項的截圖,裡面已經寫了不少筆記,這樣的話,本人每次增加了新的筆記和測試**後,只要簡單的按一下快捷鍵 ctrl + t 即可
Go語言單元測試
go語言似乎是個偏執狂,犧牲了不必要的靈活性,帶來一些強制的程式設計風格和約定。比如 無任何形式的makefile,模組就是目錄 包就是目錄 編譯配製就是目錄!不光目錄被用上了,檔名還能指定用途。檔名字尾為 test.go的都是單元測試檔案,linux32.go就是32位linux特定的 不光檔名被...
Go學習筆記 單元測試
在日常開發中,我們通常需要針對現有的功能進行單元測試,以驗證開發的正確性。在go標準庫中有乙個叫做testing的測試框架,可以進行單元測試,命令是go test 測試檔案通常是以xx test.go命名,放在同一包下面。現在假設現在需求是 完成兩個複數相加,我們只需要乙個函式便可以完成該任務。在開...
單元測試,測試用例 GO語言
資料夾目錄 split string split.go split string split test.go 執行測試函式 package split string import reflect testing 單元測試 可以和測試 放到一起,用同樣的包名 以測試 名開頭,以 test.go 結尾哦...