亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go測(cè)試之.golden文件使用示例詳解

 更新時(shí)間:2023年08月28日 09:14:57   作者:好文收藏  
這篇文章主要為大家介紹了Go測(cè)試之.golden文件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Go測(cè)試中的.golden 文件是干什么用的?

舉例說明

在Go語言中,.golden文件通常用于測(cè)試中的黃金文件(golden files)。黃金文件是在測(cè)試期間記錄預(yù)期輸出結(jié)果的文件。測(cè)試用例運(yùn)行時(shí),黃金文件用于比較實(shí)際輸出與預(yù)期輸出是否一致。

通常,".golden" 文件的命名規(guī)則是將測(cè)試文件的名稱與 ".golden" 后綴相結(jié)合,例如,如果測(cè)試文件為 "foo_test.go",則相應(yīng)的 ".golden" 文件可能被命名為 "foo_test.golden"。

在測(cè)試期間,如果測(cè)試輸出與 ".golden" 文件的內(nèi)容匹配,則測(cè)試被認(rèn)為是通過的。否則,測(cè)試將失敗并顯示差異信息,以幫助開發(fā)人員確定測(cè)試失敗的原因。

需要注意的是,".golden" 文件不應(yīng)該包含敏感信息,因?yàn)檫@些文件通常被包含在源代碼倉庫中,并且可能會(huì)被共享或分發(fā)給其他人。

".golden" 文件的命名并沒有一個(gè)官方規(guī)定的標(biāo)準(zhǔn),但是根據(jù)一些 Go 語言社區(qū)的約定,".golden" 文件通常被命名為 ".golden" 是因?yàn)檫@個(gè)后綴在文件名中很不常見,因此可以很容易地與其他文件進(jìn)行區(qū)分。

此外,一些人認(rèn)為 ".golden" 這個(gè)名稱的來源可能與軟件測(cè)試中的“黃金數(shù)據(jù)”(Golden Data)有關(guān)。在軟件測(cè)試中,“黃金數(shù)據(jù)”指的是已知正確的數(shù)據(jù),用于驗(yàn)證軟件是否按照預(yù)期運(yùn)行。因此,將測(cè)試期望輸出與已知正確的數(shù)據(jù)進(jìn)行比較,與軟件測(cè)試中使用的“黃金數(shù)據(jù)”進(jìn)行比較是相似的。這種類比可能也是 ".golden" 文件名稱的一個(gè)來源。

舉個(gè)例子,假設(shè)你正在編寫一個(gè)函數(shù)來格式化一個(gè)字符串,并且你想要編寫相應(yīng)的測(cè)試用例。你可以創(chuàng)建一個(gè)黃金文件來保存預(yù)期的輸出結(jié)果。在測(cè)試運(yùn)行時(shí),測(cè)試代碼將生成實(shí)際的輸出結(jié)果并將其與黃金文件中的預(yù)期結(jié)果進(jìn)行比較。如果實(shí)際輸出與預(yù)期輸出匹配,測(cè)試將被標(biāo)記為通過。如果不匹配,測(cè)試將被標(biāo)記為失敗,以便你可以檢查代碼的更改是否是有意的。

示例

假設(shè)你有一個(gè)名為formatter.go的文件,其中包含一個(gè)FormatString函數(shù)用于格式化字符串。你還有一個(gè)測(cè)試文件formatter_test.go,其中包含一個(gè)測(cè)試用例來測(cè)試FormatString函數(shù)。

在測(cè)試文件中,你可以創(chuàng)建一個(gè)黃金文件expected_output.golden,其中包含你期望的輸出結(jié)果。然后,你的測(cè)試用例可以讀取這個(gè)黃金文件,調(diào)用FormatString函數(shù),生成實(shí)際的輸出,并將其與黃金文件中的預(yù)期結(jié)果進(jìn)行比較。

// formatter.go
package main
import "fmt"
func FormatString(s string) string {
    return fmt.Sprintf("Formatted: %s", s)
}
// formatter_test.go
package main
import (
    "io/ioutil"
    "testing"
)
func TestFormatString(t *testing.T) {
    input := "Hello, World!"
    expectedOutput, err := ioutil.ReadFile("expected_output.golden")
    if err != nil {
        t.Fatalf("Failed to read golden file: %v", err)
    }
    actualOutput := FormatString(input)
    if string(actualOutput) != string(expectedOutput) {
        t.Errorf("Unexpected output:\nExpected: %s\nActual: %s", expectedOutput, actualOutput)
    }
}

在這個(gè)例子中,測(cè)試代碼讀取expected_output.golden文件,它的內(nèi)容可以是Formatted: Hello, World!。然后,測(cè)試用例調(diào)用FormatString函數(shù)并將其輸出與黃金文件中的預(yù)期結(jié)果進(jìn)行比較。如果兩者不匹配,測(cè)試將失敗并輸出相應(yīng)的錯(cuò)誤消息。

使用黃金文件可以有效地驗(yàn)證代碼的輸出是否與預(yù)期一致,并提供了一種可持續(xù)的方式來更新測(cè)試結(jié)果。如果你對(duì)FormatString函數(shù)進(jìn)行了更改,你只需驗(yàn)證黃金文件是否需要相應(yīng)地更新,而無需手動(dòng)更新所有測(cè)試用例的預(yù)期輸出。

測(cè)試

# command-line-arguments [command-line-arguments.test]
./formatter_test.go:15:18: undefined: FormatString

需要對(duì) 運(yùn)行/調(diào)試設(shè)置做如下修改

同時(shí)需要先執(zhí)行 go mod init golden 和 go mod tidy,否則上圖會(huì)提示 錯(cuò)誤: 找不到軟件包 golden

新建 expected_output.golden,如果什么內(nèi)容也不寫入,執(zhí)行單測(cè):

即 需要將預(yù)期的內(nèi)容寫到expected_output.golden中,最后會(huì)做一個(gè)比較

和斷言有何區(qū)別?

".golden" 文件和斷言是測(cè)試中兩個(gè)不同的概念,它們有一些相似之處,但也有一些區(qū)別。

斷言是在測(cè)試代碼中使用的一種機(jī)制,用于檢查代碼的行為是否符合預(yù)期。測(cè)試代碼中通常會(huì)使用斷言來檢查一些條件是否為真,如果條件不滿足,則測(cè)試將失敗。例如,在 Go 語言中,可以使用 assert 包中的 Equal 函數(shù)來檢查兩個(gè)值是否相等。

與斷言不同,".golden" 文件通常用于測(cè)試輸出或結(jié)果是否與預(yù)期的輸出或結(jié)果匹配。測(cè)試代碼會(huì)生成一些輸出或結(jié)果,然后與預(yù)期的輸出或結(jié)果進(jìn)行比較,如果匹配,則測(cè)試通過,否則將測(cè)試失敗。".golden" 文件是預(yù)期輸出或結(jié)果的一種形式,測(cè)試代碼會(huì)將其與實(shí)際輸出或結(jié)果進(jìn)行比較,以確定測(cè)試是否通過。

因此,斷言和".golden" 文件是測(cè)試中兩種不同的機(jī)制,它們用于檢查不同的測(cè)試條件。斷言通常用于檢查代碼的行為是否符合預(yù)期,而 ".golden" 文件通常用于測(cè)試輸出或結(jié)果是否與預(yù)期的輸出或結(jié)果匹配。

(其實(shí)和直接在斷言里寫預(yù)期的字符串效果類似,但寫文件,更適用于內(nèi)容較多的case吧; 或者Go官方?jīng)]有提供斷言,一般的項(xiàng)目都使用第三方的 github.com/stretchr/testify/assert)

“黃金文件”這個(gè)概念,在其他編程語言中有嗎?

雖然 "黃金文件" 這個(gè)特定術(shù)語在其他編程語言中可能不常見,但類似的概念在其他語言和測(cè)試框架中也存在。這些概念可能被稱為 "參考文件"、"預(yù)期輸出文件"、"基準(zhǔn)文件" 或 "固定輸出文件",具體取決于使用的語言和框架。

下面是一些示例:

  • Python Unittest:在Python的unittest框架中,可以使用 assertMultiLineEqual() 方法來比較實(shí)際輸出和參考文件中的內(nèi)容。參考文件可以是文本文件或其他格式的文件。
  • Java JUnit:在Java的JUnit測(cè)試框架中,你可以將預(yù)期輸出作為字符串或文件提供給斷言方法,然后將實(shí)際輸出與其進(jìn)行比較。這類似于使用黃金文件進(jìn)行比較。
  • C++ Catch2:Catch2是一個(gè)流行的C++測(cè)試框架。你可以使用 REQUIRE_THAT() 或其他類似的宏來比較實(shí)際輸出與預(yù)期輸出。在這種情況下,預(yù)期輸出可以是一個(gè)字符串或文件。

盡管不同的編程語言和測(cè)試框架可能使用不同的術(shù)語,但它們都提供了一種機(jī)制來驗(yàn)證實(shí)際輸出與預(yù)期輸出之間的一致性。這種機(jī)制有助于確保代碼的行為符合預(yù)期,并提供一種可持續(xù)的方式來更新測(cè)試結(jié)果。

以上就是Go測(cè)試之.golden文件使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go .golden測(cè)試文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺析Golang中類型嵌入的簡(jiǎn)介與使用

    淺析Golang中類型嵌入的簡(jiǎn)介與使用

    類型嵌入指的就是在一個(gè)類型的定義中嵌入了其他類型,Go?語言支持兩種類型嵌入,分別是接口類型的類型嵌入和結(jié)構(gòu)體類型的類型嵌入,下面我們就來詳細(xì)一下類型嵌入的使用吧
    2023-11-11
  • 使用VSCODE配置GO語言開發(fā)環(huán)境的完整步驟

    使用VSCODE配置GO語言開發(fā)環(huán)境的完整步驟

    Go語言是采用UTF8編碼的,理論上使用任何文本編輯器都能做Go語言開發(fā),大家可以根據(jù)自己的喜好自行選擇,下面這篇文章主要給大家介紹了關(guān)于使用VSCODE配置GO語言開發(fā)環(huán)境的完整步驟,需要的朋友可以參考下
    2022-11-11
  • Go語言中的iota關(guān)鍵字的使用

    Go語言中的iota關(guān)鍵字的使用

    這篇文章主要為大家詳細(xì)介紹了Go語言中的iota關(guān)鍵字的相關(guān)使用,文中的示例代碼講解詳細(xì),對(duì)我們深入了解Go語言有一定的幫助,需要的可以參考下
    2023-08-08
  • Go實(shí)現(xiàn)自動(dòng)解壓縮包以及讀取docx/doc文件內(nèi)容詳解

    Go實(shí)現(xiàn)自動(dòng)解壓縮包以及讀取docx/doc文件內(nèi)容詳解

    在開發(fā)過程中,我們常常需要處理壓縮包和文檔文件。本文將介紹如何使用Go語言自動(dòng)解壓縮包和讀取docx/doc文件,需要的可以參考一下
    2023-03-03
  • 詳解go程序如何在windows服務(wù)中開啟和關(guān)閉

    詳解go程序如何在windows服務(wù)中開啟和關(guān)閉

    這篇文章主要介紹了一個(gè)go程序,如何在windows服務(wù)中優(yōu)雅開啟和關(guān)閉,文中通過代碼示例和圖文講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • Golang 實(shí)現(xiàn) Redis系列(六)如何實(shí)現(xiàn) pipeline 模式的 redis 客戶端

    Golang 實(shí)現(xiàn) Redis系列(六)如何實(shí)現(xiàn) pipeline 模式的 redis 客戶端

    pipeline 模式的 redis 客戶端需要有兩個(gè)后臺(tái)協(xié)程負(fù)責(zé) tcp 通信,調(diào)用方通過 channel 向后臺(tái)協(xié)程發(fā)送指令,并阻塞等待直到收到響應(yīng),本文是使用 golang 實(shí)現(xiàn) redis 系列的第六篇, 將介紹如何實(shí)現(xiàn)一個(gè) Pipeline 模式的 Redis 客戶端。
    2021-07-07
  • Golang?并發(fā)下的問題定位及解決方案

    Golang?并發(fā)下的問題定位及解決方案

    由于?gin-swagger?是并發(fā)執(zhí)行的,?輸出的日志本身是錯(cuò)位,這就導(dǎo)致無法定義是哪一個(gè)結(jié)構(gòu)體缺少?tag?導(dǎo)致的,這篇文章主要介紹了Golang?并發(fā)下的問題定位及解決方案,需要的朋友可以參考下
    2022-03-03
  • Golang配置管理庫?Viper的教程詳解

    Golang配置管理庫?Viper的教程詳解

    這篇文章主要介紹了Golang?配置管理庫?Viper,使用?viper?能夠很好的去管理你的配置文件信息,比如數(shù)據(jù)庫的賬號(hào)密碼,服務(wù)器監(jiān)聽的端口,你可以通過更改配置文件去更改這些內(nèi)容,而不用定位到那一段代碼上去,提高了開發(fā)效率,需要的朋友可以參考下
    2022-05-05
  • golang使用RSA加密和解密的實(shí)現(xiàn)示例

    golang使用RSA加密和解密的實(shí)現(xiàn)示例

    在Golang中RSA加密和解密是一個(gè)常見的操作,本文主要介紹了golang使用RSA加密和解密的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • Go語言實(shí)現(xiàn)棧與隊(duì)列基本操作學(xué)家

    Go語言實(shí)現(xiàn)棧與隊(duì)列基本操作學(xué)家

    go語言中,并沒有棧與隊(duì)列相關(guān)的數(shù)據(jù)結(jié)構(gòu),但是我們可以借助切片來實(shí)現(xiàn)棧與隊(duì)列的操作;接下來我們一起實(shí)現(xiàn)棧與隊(duì)列基本操作,感興趣的可以了解一下
    2022-11-11

最新評(píng)論