go newscanner判断文件读取结束_Go单元测试-testing
在開發程序中,很重要一點就是測試,測試可以保證代碼的質量,保證每個函數可以正常運行。但是如何保證寫出來的程序是否正確。單元測試一般是用來測試我們的代碼邏輯有沒有問題,有沒有按照我們期望的運行,以保證代碼質量。
testing - 單元測試
Go語言自帶有一個輕量級的測試框架testing和自帶的go test命令來實現單元測試(T類型)和性能測試(B類型)。testing框架和其他語言中的測試框架類似,你可以基于這個框架寫針對相應函數的測試用例,也可以基于該框架寫相應的壓力測試用例。下面主要以單元測試講解。
如何編寫測試用例
由于go test命令只能在一個相應的目錄下執行所有文件,所以我們接下來新建一個項目目錄gotest,這樣我們 所有的代碼和測試代碼都在這個目錄下。
接下來我們在該目錄下面創建兩個文件:gotest.go和gotest_test.go
gotest.go
package gotestimport ("fmt""io/ioutil""encoding/json" )type Monster struct{Name stringAge intSkill string}//給Monster綁定方法,可以將一個Monster變量(對象),序列化后保存到文件中func (this *Monster)Store()bool{//先序列化data,err := json.Marshal(this)if err != nil{fmt.Println("marshal err = ",err)return false}//保存到文件filePath := "./monster.ser"err = ioutil.WriteFile(filePath,data,0666)if err != nil{fmt.Println("write file err = ",err)return false}return true}//給Monster 綁定方法Restore,可以將一個序列化的Marshal(),從文件中讀取 //并反序列化為Monster對象,檢查反序列化,名字正確func (this *Monster) ReStore()bool{//1、先從文件中,讀取序列化的字符串filePath := "monster.ser"data ,err := ioutil.ReadFile(filePath)if err != nil{fmt.Println("Readfile err =",err)return false}//2.使用讀取到data []byte,對反序列化err = json.Unmarshal(data,this)if err != nil{fmt.Println("Unmarshal err = ",err)return false}return true }gotest_test.go
這是我們的單元測試文件。通過 go test 命令,能夠自動執行如下形式的任何函數:
package gotestimport ("testing" )//測試用例,測試store方法func TestStore(t *testing.T){//先創建一個Monster實例monster := &Monster{Name : "minger",Age : 23,Skill : "Linux c/c++",}res := monster.Store()if !res {t.Fatalf("monster.Store() 錯誤,希望為 = %v 實際為 = %v",true,res)} t.Logf("monster.Store(),測試成功!") }func TestReStore(t *testing.T){//先創建一個 Monster 實例,不需要指定字段的值var monster = & Monster{}res := monster.ReStore()if !res{t.Fatalf("monster.ReStore()錯誤,希望為 = %v 實際為 = %v",true,res)}//進一步判斷if monster.Name != "minger"{t.Fatalf("monster.Restore() 錯誤,希望為 = %v ,實際為 = %v","minger",monster.Name)}t.Logf("monster.ReStore() 測試成功!") }然后我們在終端的項目目錄下運行go test -v就可以看到測試結果了。go test -v:顯示所有測試函數運行細節
go test -v
monster.ser 文件內容:
go test -run TestStore 指定要執行的測試函數。
gotest_test.go:這是我們的單元測試文件,但是記住下面的這些原則:
1、文件名必須是_test.go結尾的,這樣在執行go test的時候才會執行到相應的代碼 2、單元測試的函數名必須以Test開頭,是可導出公開的函數 3、測試函數TestXxx()的傳遞給測試函數的參數是 *testing.T 類型。它用于管理測試狀態并支持格式化測試日志。 4、測試格式:func TestXxx (t *testing.T),Xxx部分可以為任意的字母數字的組合,但是首字母不能是小寫字母[a-z],例如Testintdiv是錯誤的函數名。 5、函數中通過調用testing.T的Error, Errorf, FailNow, Fatal, FatalIf方法,說明測試不通過,調用Log、Logf方法用來記錄測試的信息。 歡迎關注微信公眾號“程序猿編碼” ,這里Linux c/c++ 、Python、Go語言、數據結構與算法、網絡編程相關知識,常用的程序員工具。每日00:10之前更新新聞簡報,一份簡報,縱覽天下事!總結
以上是生活随笔為你收集整理的go newscanner判断文件读取结束_Go单元测试-testing的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 生成对称矩阵_对称矩阵|
- 下一篇: ruby 生成哈希值_如何检查Ruby中