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

Golang 中的可測試示例函數(shù)(Example Function)詳解

 更新時間:2023年07月24日 09:22:11   作者:路多辛  
這篇文章詳細講解了 Golang 中的可測試示例函數(shù),示例函數(shù)類似于單元測試函數(shù),但沒有  *testing 類型的參數(shù),編寫示例函數(shù)也是很容易的,本文就通過代碼示例給大家介紹一下Golang的可測試示例函數(shù),需要的朋友可以參考下

Golang 可測試示例函數(shù) (Example Function)

示例函數(shù)類似于單元測試函數(shù),但沒有  *testing 類型的參數(shù)。編寫示例函數(shù)也是很容易的:

  • 創(chuàng)建對應(yīng)的測試文件:在 Go 項目的源代碼目錄下創(chuàng)建一個新的文件(和被測代碼文件在同一個包),以 _test.go 為后綴名。例如,要測試 net 包中 dial.go 中的方法,在 net 包中創(chuàng)建一個名字為 dial_test.go 或者 net_test.go 或者 example_test.go 文件,和單元測試文件是一樣的。
  • 編寫示例函數(shù):在測試文件中,編寫一個以 Example 為前綴的函數(shù),后面跟上一個或多個字符或字符組合來標識測試用例的名稱(一般使用被測的對象的名稱,例如包名稱、函數(shù)名稱、結(jié)構(gòu)體名稱等,也可以不跟上任何字符),沒有任何參數(shù)。
  • 在方法體中編寫使用方式,將內(nèi)容輸出到標準輸出。方法體的最后可以添加 “Output:” 或 “Unordered output:” 注釋,也可以不添加。如果添加了“Output:”注釋,會將輸出結(jié)果與注釋進行精確比較。如果添加了“Unordered output:”注釋,也會將輸出與注釋進行比較,但是會忽略行順序。沒有添加任何 output 注釋,示例函數(shù)會被編譯但不會被執(zhí)行。

可測試示例函數(shù)示例

以 json 格式校驗工具 https://github.com/luduoxin/json-validator-go 為例,validator 包中的 scanner.go 文件中的關(guān)鍵函數(shù) Valid 用于校驗給定字符串是否 json 格式,對應(yīng)的測試文件為 scanner_test.go,里面的示例函數(shù)為 ExampleValid,代碼如下:

func ExampleValid() {
	fmt.Println(Valid([]byte("{}")))
	// output: true
}

運行看下效果:

=== RUN   ExampleValid
--- PASS: ExampleValid (0.00s)
PASS

看一個有多條輸出結(jié)果的示例:

func ExampleValid() {
	fmt.Println(Valid([]byte("{}")))
	fmt.Println(Valid([]byte(`a:b`)))
	// output: true
	// false
}

運行看下效果:

=== RUN   ExampleValid
--- PASS: ExampleValid (0.00s)
PASS

看一個 “Unordered output:” 注釋的示例:

func ExampleValid() {
	fmt.Println(Valid([]byte("{}")))
	fmt.Println(Valid([]byte(`{"a":"b"}`)))
	// Unordered output: true
	// true
}

運行看下效果:

=== RUN   ExampleValid
--- PASS: ExampleValid (0.00s)
PASS

看一個測試不通過的示例:

func ExampleValid() {
	fmt.Println(Valid([]byte("{}")))
	fmt.Println(Valid([]byte(`{"a":"b"}`)))
	// Unordered output: true
	// false
}

運行看下效果:

=== RUN   ExampleValid
--- FAIL: ExampleValid (0.00s)
got:
true
true

看一個沒有 output 注釋的示例:

func ExampleValid() {
	fmt.Println(Valid([]byte("{}")))
}

運行 go test 命令,此函數(shù)不會被執(zhí)行。

上面測試通過的示例(運行結(jié)果為 PASS 的示例)的通過是什么意思呢?就是在執(zhí)行示例時,測試框架捕獲寫入到標準輸出的數(shù)據(jù),然后與 “output:” 注釋中的結(jié)果進行比較,如果匹配,則測試通過,否則測試不通過(結(jié)果為 FAIL)。

在 Godoc 中的展示

示例函數(shù)會在 Godoc 中作為對應(yīng)函數(shù)的示例,看 Golang 官方的一張截圖:

Godoc 使用命名約定將示例函數(shù)與包級標的識符關(guān)聯(lián)起來。約定規(guī)則如下:

func ExampleFoo()     // documents the Foo function or type
func ExampleBar_Qux() // documents the Qux method of type Bar
func Example()        // documents the package as a whole

按照這個約定,Godoc 將在 Reverse  函數(shù)的文檔旁邊顯示 ExampleReverse 示例。通過使用以下劃線開頭、后跟小寫字母的后綴,可以為指定函數(shù)(或者包、結(jié)構(gòu)體、方法等)提供多個示例。如下:

func ExampleReverse()
func ExampleReverse_second()
func ExampleReverse_third()

小結(jié)

本文詳細講解了 Golang 中的可測試示例函數(shù), 可以很方便地轉(zhuǎn)換為 Godoc 中可讀性很強的文檔,這也是 Golang 提倡的代碼即文檔的一個最佳實踐,如果你還沒有使用過,趕快使用起來吧。

到此這篇關(guān)于Golang 中的可測試示例函數(shù)(Example Function)詳解的文章就介紹到這了,更多相關(guān)Golang可測試示例函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang中為什么不存在三元運算符詳解

    golang中為什么不存在三元運算符詳解

    這篇文章主要給大家介紹了關(guān)于golang中為什么不存在三元運算符的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • golang新手們?nèi)菀追傅?個錯誤總結(jié)

    golang新手們?nèi)菀追傅?個錯誤總結(jié)

    這篇文章主要給大家介紹了關(guān)于golang新手們?nèi)菀追傅?個錯誤,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-08-08
  • Go語言如何使用golang-jwt/jwt/v4進行JWT鑒權(quán)詳解

    Go語言如何使用golang-jwt/jwt/v4進行JWT鑒權(quán)詳解

    最近項目中需要用到鑒權(quán)機制,golang中jwt可以用,這篇文章主要給大家介紹了關(guān)于Go語言如何使用golang-jwt/jwt/v4進行JWT鑒權(quán)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Swaggo零基礎(chǔ)入門教程

    Swaggo零基礎(chǔ)入門教程

    swagger是一套基于OpenAPI規(guī)范構(gòu)建的開源工具,使用RestApi。swagger-ui呈現(xiàn)出來的是一份可交互式的API文檔,可以直接在文檔頁面嘗試API的調(diào)用
    2023-01-01
  • 關(guān)于Golang獲取當前項目絕對路徑的問題

    關(guān)于Golang獲取當前項目絕對路徑的問題

    這篇文章主要介紹了Golang獲取當前項目絕對路徑的問題,通常的做法是go run用于本地開發(fā),用一個命令中快速測試代碼確實非常方便;在部署生產(chǎn)環(huán)境時,我們會通過go build構(gòu)建出二進制文件然后上傳到服務(wù)器再去執(zhí)行,那么會產(chǎn)生什么問題呢?感興趣的朋友一起看看吧
    2022-04-04
  • 淺談Go語言多態(tài)的實現(xiàn)與interface使用

    淺談Go語言多態(tài)的實現(xiàn)與interface使用

    如果大家系統(tǒng)的學過C++、Java等語言以及面向?qū)ο蟮脑?,相信?yīng)該對多態(tài)不會陌生。多態(tài)是面向?qū)ο蠓懂牣斨薪?jīng)常使用并且非常好用的一個功能,它主要是用在強類型語言當中,像是Python這樣的弱類型語言,變量的類型可以隨意變化,也沒有任何限制,其實區(qū)別不是很大
    2021-06-06
  • golang讀取文件的常用方法總結(jié)

    golang讀取文件的常用方法總結(jié)

    今天小編就為大家分享一篇關(guān)于golang讀取文件的常用方法總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 詳解Golang net/http包中的RoundTripper接口

    詳解Golang net/http包中的RoundTripper接口

    RoundTripper 是 net/http 包中的一個接口,定義了處理 HTTP 請求返回和響應(yīng)的方法,是 http.Client 結(jié)構(gòu)體中執(zhí)行 http 請求的核心部分,本文將詳細的給大家介紹Golang RoundTripper接口,需要的朋友可以參考下
    2023-09-09
  • Go語言pointer及switch?fallthrough實戰(zhàn)詳解

    Go語言pointer及switch?fallthrough實戰(zhàn)詳解

    這篇文章主要為大家介紹了Go語言pointer及switch?fallthrough實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • go?variant底層原理深入解析

    go?variant底層原理深入解析

    這篇文章主要為大家介紹了go?variant底層原理深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11

最新評論