欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文詳解Go語(yǔ)言單元測(cè)試的原理與使用

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

前言

為什么要引用單元測(cè)試類

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

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

不利于管理,因?yàn)楫?dāng)我們測(cè)試多個(gè)函數(shù)或者多個(gè)模塊時(shí),都需要寫(xiě)在main函數(shù),不利于我們管理和清晰我們的思路

單元測(cè)試基本介紹

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

優(yōu)點(diǎn)

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

Testing規(guī)范

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

2.測(cè)試用例函數(shù)必須以Test開(kāi)頭,一般來(lái)說(shuō)就是Test+被測(cè)試的函數(shù)名

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

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

5.當(dāng)出現(xiàn)錯(cuò)誤使,可以使用t.Fatalf來(lái)格式化輸出錯(cuò)誤信息,并退出程序

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

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

8.pass表示測(cè)試用例運(yùn)行成功,Fail表示測(cè)試用例運(yùn)行失敗

9.測(cè)試單個(gè)文件,一個(gè)要帶上被測(cè)試的源文件

go test -v cal_test.go cal.go

10.測(cè)試單個(gè)方法

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+要測(cè)試的函數(shù)名(t *testing)
func TestAdd(t *testing.T){
	res:=add(9)
	if(res!=55){
		t.Fatalf("add(10)執(zhí)行錯(cuò)誤,期望值=%v 實(shí)際值=%v\n",55,res)
	}
	t.Logf("執(zhí)行正確!!")
}

Golang運(yùn)行

命令行

案例

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() 錯(cuò)誤,期望為%v,實(shí)際為%v",true,flag)
	}
	t.Logf("monster.Store()測(cè)試成功")
}
func TestRestore(t *testing.T)  {
	var monster=&Monster{}
	flag:=monster.ReStore()
	if !flag{
		t.Fatalf("monster.ReStore() 錯(cuò)誤,期望為%v,實(shí)際為%v",true,flag)
	}
	t.Logf("monster.Store()測(cè)試成功")
	fmt.Println(monster) //&{張三 18 打游戲}
}

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

相關(guān)文章

  • golang 限制同一時(shí)間的并發(fā)量操作

    golang 限制同一時(shí)間的并發(fā)量操作

    這篇文章主要介紹了golang 限制同一時(shí)間的并發(fā)量操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 一文帶你了解Go語(yǔ)言中接口的使用

    一文帶你了解Go語(yǔ)言中接口的使用

    這篇文章主要和大家分享一下Go語(yǔ)言中的接口的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的小伙伴可以參考一下
    2022-12-12
  • 淺談GoLang幾種讀文件方式的比較

    淺談GoLang幾種讀文件方式的比較

    這篇文章主要介紹了淺談GoLang幾種讀文件方式的比較,一般來(lái)說(shuō)常用的有三種。使用Read加上buffer,使用bufio庫(kù)和ioutil 庫(kù),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2019-01-01
  • Go設(shè)計(jì)模式之中介者模式講解和代碼示例

    Go設(shè)計(jì)模式之中介者模式講解和代碼示例

    中介者是一種行為設(shè)計(jì)模式,讓程序組件通過(guò)特殊的中介者對(duì)象進(jìn)行間接溝通,達(dá)到減少組件之間依賴關(guān)系的目的,因此本文就給大家詳細(xì)介紹一下Go中介者模式,需要的朋友可以參考下
    2023-06-06
  • Golang單元測(cè)試中的技巧分享

    Golang單元測(cè)試中的技巧分享

    這篇文章主要為大家詳細(xì)介紹了Golang進(jìn)行單元測(cè)試時(shí)的一些技巧和科技,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下
    2023-03-03
  • Go Module依賴管理的實(shí)現(xiàn)

    Go Module依賴管理的實(shí)現(xiàn)

    Go Module是Go語(yǔ)言的官方依賴管理解決方案,其提供了一種簡(jiǎn)單、可靠的方式來(lái)管理項(xiàng)目的依賴關(guān)系,本文主要介紹了Go Module依賴管理的實(shí)現(xiàn),感興趣的可以了解一下
    2024-06-06
  • golang封裝一個(gè)執(zhí)行命令行的函數(shù)(return?stderr/stdout/exitcode)示例代碼

    golang封裝一個(gè)執(zhí)行命令行的函數(shù)(return?stderr/stdout/exitcode)示例代碼

    在?Go?語(yǔ)言中,您可以使用?os/exec?包來(lái)執(zhí)行外部命令,不通過(guò)調(diào)用?shell,并且能夠獲得進(jìn)程的退出碼、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出,下面給大家分享golang封裝一個(gè)執(zhí)行命令行的函數(shù)(return?stderr/stdout/exitcode)的方法,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • 一文了解Go語(yǔ)言的并發(fā)特性

    一文了解Go語(yǔ)言的并發(fā)特性

    本文主要介紹了一文了解Go語(yǔ)言的并發(fā)特性,通過(guò)輕量級(jí)線程、通道及選擇語(yǔ)句,使得并發(fā)編程變得既簡(jiǎn)單又高效,下面就來(lái)具體了解一下如何使用,感興趣的可以了解一下
    2024-02-02
  • go語(yǔ)言中時(shí)間戳格式化的方法

    go語(yǔ)言中時(shí)間戳格式化的方法

    這篇文章主要介紹了go語(yǔ)言中時(shí)間戳格式化的方法,涉及Go語(yǔ)言中time的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Go語(yǔ)言基礎(chǔ)之網(wǎng)絡(luò)編程全面教程示例

    Go語(yǔ)言基礎(chǔ)之網(wǎng)絡(luò)編程全面教程示例

    這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)之網(wǎng)絡(luò)編程全面教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12

最新評(píng)論