單元測試快速入門

package main

import (
“testing”//引入go的testing框架包
“encoding/json”
“fmt”
“io/ioutil”
)

/*
單元測試-基本介紹
Go語言中自帶有一個輕量級的測試框架testing和自帶的go test命令來實現單元測試和性能測試,testing框架和其他語言中的測試框架類似,可以基於這個框架寫針對相應函數的測試用例,也可以基於該框架寫相應的壓力測試用例。通過單元測試,可以解決如下問題:
1)確保每個函數是可運行,並且運行結果是正確的
2)確保寫出來的代碼性能是好的
3)單元測試能及時的發現程序設計或實現的邏輯錯誤,使問題及早暴露,便於問題的定位解決,而性能測試的終於在於發現成都設計上的一些問題,讓程序能夠在高併發的情況下還能保持穩定
使用Go的單元測試,對addUpper和sub函數進行測試。
特別說明:測試時,可能需要暫時退出360.(因爲360可能會認爲生成的測試用例程序時木馬)
*/
func TestAddUpper(t testing.T){
//調用
res := addUpper(10)
if res != 55{
//fmt.Printf(“AddUpper(10)執行錯誤,期望值=%v 實際值=%v\n",55,res)
t.Fatalf(“AddUpper(10)執行錯誤,期望值=%v實際值=%v\n”,55,res)//輸入日誌後退出日誌
}
//如果正確,輸出日誌
t.Logf(“AddUpper(10)執行正確…”)
}
/

1)測試用例文件名必須以——test.go比如cal—test.go不是固定。
2)測試用例函數必須以Test開頭,一般來說就是Test+被測試的函數名,比如TestAddUpper。
3)TestAdduper(t tesing.T)的形參類型必須是testing.t[看一下手冊]
4)一個測試用裏文件中,可以有多個測試用例函數,比如TestAddUper、TestSub
5)運行測試用例指令
(1)cmd>go test[如果運行正確,無日誌,錯誤時,會輸出日誌]
(2)cmd>go test-v[運行正確或時錯誤,都輸出日誌]
6)當出現錯誤時,可以使用t.Fatalf來格式化輸出五哦嗚信息,並退出程序
7)t.logt方法可以輸出相應的日誌
8)測試用例函數,並沒有放在main函數中,也執行了,這就是測試用例的方便之處[原理圖]
9)PASS表示測試用例運行成功,FAIL表示測試用例運行失敗。
10)測試單各文件,一定要帶上被測試的原文件
go test-v cal_test.go cal.go
11)測試單各方法
go test-v-test.run TestAddUpper

單元測試綜合案例要求:
1)編寫一個Monster結構體,字段Name,Age,Skill
2)給Monster綁定方法Store,可以將一個Monster變量(對象),序列化後保存到文件中
3)給Monster綁定方法ReStore,可以將一個序列化的Monster,從文件中讀取,並反序列化爲Monster對象,檢查反序列化,名字正確。
4)編程測試用例文件store_test.go,編寫測試用例函數TestStore和TestRestore進行測試。
課堂練習

*/
type Monster struct {
Name string
Age int
Skill string
}
//給Monster綁定方法Store,可以將一個Monster變量(對象),序列化後保存到文件中
func(this *Monster)Store()bool{

//先序列化
data,err :=json.Marshal(this)
if err!=nil{
	fmt.Println("marshal err=",err)
	return false
}
//保存到文件
filePath := "d:/monster.ser"
err=ioutil.WriteFile(filePath,data,0666)
if err != nil{
	fmt.Println("write file err =",err)
	return false
}
return  true

}

//給Monster綁定方法ReStore,可以將一個序列化的Monster,從文件中讀取,
//並反序列化爲Monster對象,檢查反序列化,名字正確
func(this *Monster)ReStore()bool{

//1.將從文件中,"d:/monster.ser"
filePath :="d:/monster.ser"
data,err:=ioutil.ReadFile(filePath)
if err!=nil{
	fmt.Println("write file err =",err)
	return  false
}
//2.使用讀取到data[]byte,對反序列化
err = json.Unmarshal(data,this)
if err!=nil{
	fmt.Println("UnMarshal err=",err)
	return  false
}
return true

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章