Test單元測試
尚硅谷Golang課

Test單元測試

  1. 單元測試目的是驗證程式碼(例如一個方法)本身的邏輯是否正確
  2. 單元測試應排除外部依賴(Database、File System IO)
  3. 單元測試應該是隨時隨地都要能正確執行
  4. 單元測試的標題需要具備好的可讀性、明確、標題與測試的內容精確吻合 例:「public void GetTest_帶入會員ID_應回該ID搜尋到的會員資料DTO」,盡量符合:受測方法_傳入參數意義_期望得到的結果
  5. 一個測試只應該關注一件事情,如果受測目標有多種狀況,應該分成好幾個測試去涵蓋所有邏輯

3A原則

  • Arrange = 準備受測物件、參數、預期結果
  • Act = 執行受測方法
  • Assert = 驗證執行結果與預測結果是否一致

cal.go

func addUpper(n int) int {
	res := 0
	for i := 0; i <= n; i++ {
		res = +i
	}
	return res
}

func getSub(n1, n2 int) int {
	return n1 - n2
}

cal_test.go

func TestAddUpper(t *testing.T) {
	//調用
	res := addUpper(10)
	if res != 55 {
		t.Fatalf("AddUpper(10)執行錯誤 期望=%v 實際=%v", 55, res)
	}
	t.Logf("執行正確")
}

func TestHello(t *testing.T) {
	fmt.Println("hello")
}

func TestGetSub(t *testing.T) {
	res2 := getSub(5, 10)
	if res2 != 10 {
		t.Fatalf("getSub(5, 10)執行錯誤 期望=%v 實際=%v", 10, res2)
	}
	t.Logf("執行正確")
}

測性能

Split.go

// abc,b=>[a c]
func Split(str, sep string) []string {
	// str="bsfcvjkhbafs" sep="b"
	var ret = make([]string, 0, strings.Count(str, sep)+1)
	index := strings.Index(str, sep)
	for index >= 0 {
		ret = append(ret, str[:index])
		str = str[index+len(sep):]
		index = strings.Index(str, sep)
	}
	ret = append(ret, str)
	return ret
}

Split_test.go

func BenchmarkSplit(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Split("a:b:c", ":")
	}
}

上次修改於 2021-08-01

此篇文章的評論功能已經停用。