最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文詳解Go語言單元測試的原理與使用

 更新時間:2022年09月23日 09:13:34   作者:山與路  
Go語言中自帶有一個輕量級的測試框架testing和自帶的go?test命令來實現(xiàn)單元測試和性能測試。本文將通過示例詳細聊聊Go語言單元測試的原理與使用,需要的可以參考一下

前言

為什么要引用單元測試類

傳統(tǒng)方法的缺點分析

不方便,我們需要在main函數(shù)中去調(diào)用,這樣就需要去修改main函數(shù),如果現(xiàn)在項目正在運行,就可能去停止項目

不利于管理,因為當我們測試多個函數(shù)或者多個模塊時,都需要寫在main函數(shù),不利于我們管理和清晰我們的思路

單元測試基本介紹

Go語言中自帶有一個輕量級的測試框架testing和自帶的go test命令來實現(xiàn)單元測試和性能測試,testing框架和其他語言中的測試框架類似,可以基于這個框架寫針對相應(yīng)函數(shù)的測試用例,也可以基于該框架寫相應(yīng)的壓力測試用例

優(yōu)點

  • 確保每個函數(shù)是可運行,并且運行結(jié)果是正確的
  • 確保寫出來的代碼性能是好的
  • 單元測試能及時的發(fā)現(xiàn)程序設(shè)計或?qū)崿F(xiàn)的邏輯錯誤,使問題及早暴露,便于問題的定位解決,而性能測試的重點在于發(fā)現(xiàn)程序設(shè)計的一些問題,讓程序能夠在高并發(fā)的情況下還能保持穩(wěn)定

Testing規(guī)范

1.測試用例文件名必須以 _test.go結(jié)尾

2.測試用例函數(shù)必須以Test開頭,一般來說就是Test+被測試的函數(shù)名

3.測試用例函數(shù)的形參類型必須是*testing.T

4.一個測試用例文件中,可以由多個測試用例函數(shù)

5.當出現(xiàn)錯誤使,可以使用t.Fatalf來格式化輸出錯誤信息,并退出程序

6.t.Logf方法可以輸出相應(yīng)的日志

7.測試用例函數(shù),并沒有放在main函數(shù)中,但是卻執(zhí)行了main函數(shù)

8.pass表示測試用例運行成功,Fail表示測試用例運行失敗

9.測試單個文件,一個要帶上被測試的源文件

go test -v cal_test.go cal.go

10.測試單個方法

go test -v -test.run 函數(shù)名

基本使用

cal.go

package main

func add(n int)(int){
	var sum int
	for i:=1;i<=n ;i++  {
		sum+=i
	}
	return sum
}

cal_test.go

package main

import "testing"

//函數(shù)名規(guī)范 Test+要測試的函數(shù)名(t *testing)
func TestAdd(t *testing.T){
	res:=add(9)
	if(res!=55){
		t.Fatalf("add(10)執(zhí)行錯誤,期望值=%v 實際值=%v\n",55,res)
	}
	t.Logf("執(zhí)行正確!!")
}

Golang運行

命令行

案例

monster.go

package monster

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
)

type Monster struct {
	Name string
	Age int
	Skill string
}

func (this *Monster) Store() bool {
	data,err:=json.Marshal(this)
	if err!=nil{
		fmt.Println("err=",err)
		return false
	}
	filename:="f:/test.ser"
	err2:=ioutil.WriteFile(filename,data,0666)
	if err2 !=nil{
		fmt.Println("err=",err2)
		return false
	}
	return true
}
func (this *Monster) ReStore() bool {
	filename:="f:/test.ser"
	reader,err2:=ioutil.ReadFile(filename)
	if err2 !=nil{
		fmt.Println("err=",err2)
		return false
	}
	err:=json.Unmarshal(reader,this)
	if err!=nil{
		fmt.Println("err=",err)
		return false
	}
	return true
}

monster_test.go

package monster

import (
	"fmt"
	"testing"
)

func TestStore(t *testing.T)  {
	monster:=&Monster{
		Name:  "張三",
		Age:   18,
		Skill: "打游戲",
	}
	flag:=monster.Store()
	if !flag{
		t.Fatalf("monster.Store() 錯誤,期望為%v,實際為%v",true,flag)
	}
	t.Logf("monster.Store()測試成功")
}
func TestRestore(t *testing.T)  {
	var monster=&Monster{}
	flag:=monster.ReStore()
	if !flag{
		t.Fatalf("monster.ReStore() 錯誤,期望為%v,實際為%v",true,flag)
	}
	t.Logf("monster.Store()測試成功")
	fmt.Println(monster) //&{張三 18 打游戲}
}

到此這篇關(guān)于一文詳解Go語言單元測試的原理與使用的文章就介紹到這了,更多相關(guān)Go語言單元測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • grom設(shè)置全局日志實現(xiàn)執(zhí)行并打印sql語句

    grom設(shè)置全局日志實現(xiàn)執(zhí)行并打印sql語句

    本文主要介紹了grom設(shè)置全局日志實現(xiàn)執(zhí)行并打印sql語句,包括設(shè)置日志級別、實現(xiàn)自定義Logger接口以及如何使用GORM的默認logger,通過這些方法,可以更好地控制和記錄數(shù)據(jù)庫操作的日志信息
    2025-03-03
  • Go語言對字符串進行SHA1哈希運算的方法

    Go語言對字符串進行SHA1哈希運算的方法

    這篇文章主要介紹了Go語言對字符串進行SHA1哈希運算的方法,實例分析了Go語言針對字符串操作的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Golang異常處理之defer,panic,recover的使用詳解

    Golang異常處理之defer,panic,recover的使用詳解

    這篇文章主要為大家介紹了Go語言異常處理機制中defer、panic和recover三者的使用方法,文中示例代碼講解詳細,需要的朋友可以參考下
    2022-05-05
  • Go?不支持?[]T轉(zhuǎn)換為[]interface類型詳解

    Go?不支持?[]T轉(zhuǎn)換為[]interface類型詳解

    這篇文章主要為大家介紹了Go不支持[]T轉(zhuǎn)換為[]interface類型詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Go語言中的UTF-8實現(xiàn)

    Go語言中的UTF-8實現(xiàn)

    這篇文章主要介紹了Go語言中的UTF-8實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Go語言學習之JSON編碼解析與使用

    Go語言學習之JSON編碼解析與使用

    這篇文章主要為大家詳細介紹了Go語言中JSON編碼的解析與使用已經(jīng)JSON與Map、結(jié)構(gòu)體的互相轉(zhuǎn)化,文中的示例代碼講解詳細,需要的可以參考一下
    2023-02-02
  • go swagger生成接口文檔使用教程

    go swagger生成接口文檔使用教程

    這篇文章主要為大家介紹了go swagger生成接口文檔使用教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 深入理解Go語言實現(xiàn)多態(tài)?

    深入理解Go語言實現(xiàn)多態(tài)?

    本文主要介紹了Go語言實現(xiàn)多態(tài),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Golang中如何使用lua進行擴展詳解

    Golang中如何使用lua進行擴展詳解

    這篇文章主要給大家介紹了關(guān)于Golang中如何使用lua進行擴展的相關(guān)資料,這是最近在工作中遇到的一個問題,覺著有必要分享出來給大家學習,文中給出了詳細的示例,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • Go語言實現(xiàn)優(yōu)雅關(guān)機和重啟的示例詳解

    Go語言實現(xiàn)優(yōu)雅關(guān)機和重啟的示例詳解

    優(yōu)雅的關(guān)機是指在關(guān)閉服務(wù)之前,先讓服務(wù)處理完當前正在處理的請求,然后再關(guān)閉服務(wù),本文主要為大家詳細介紹了如何使用Go語言實現(xiàn)優(yōu)雅關(guān)機和重啟,感興趣的小伙伴可以參考一下
    2025-04-04

最新評論

陆丰市| 祁东县| 嘉黎县| 嵊泗县| 定陶县| 绥芬河市| 富裕县| 伊吾县| 都安| 雷州市| 社会| 类乌齐县| 大庆市| 庐江县| 莫力| 高碑店市| 东宁县| 北川| 昂仁县| 富裕县| 措美县| 体育| 雷州市| 阿拉善左旗| 麻江县| 高雄县| 马公市| 南汇区| 沁水县| 蓬溪县| 昭苏县| 河池市| 奉化市| 玛多县| 临桂县| 闸北区| 临邑县| 星座| 阜康市| 广宗县| 崇左市|