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

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)檫@些文件通常被包含在源代碼倉(cāng)庫(kù)中,并且可能會(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)文章

  • Go語言:打造優(yōu)雅數(shù)據(jù)庫(kù)單元測(cè)試的實(shí)戰(zhàn)指南

    Go語言:打造優(yōu)雅數(shù)據(jù)庫(kù)單元測(cè)試的實(shí)戰(zhàn)指南

    Go語言數(shù)據(jù)庫(kù)單元測(cè)試入門:聚焦高效、可靠的數(shù)據(jù)庫(kù)代碼驗(yàn)證!想要確保您的Go應(yīng)用數(shù)據(jù)層堅(jiān)如磐石嗎?本指南將手把手教您如何利用Go進(jìn)行數(shù)據(jù)庫(kù)單元測(cè)試,輕松揪出隱藏的bug,打造無懈可擊的數(shù)據(jù)處理邏輯,一起來探索吧!
    2024-01-01
  • GoLang并發(fā)機(jī)制探究goroutine原理詳細(xì)講解

    GoLang并發(fā)機(jī)制探究goroutine原理詳細(xì)講解

    goroutine是Go語言提供的語言級(jí)別的輕量級(jí)線程,在我們需要使用并發(fā)時(shí),我們只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。這篇文章主要介紹了GoLang并發(fā)機(jī)制goroutine原理,感興趣的可以了解一下
    2022-12-12
  • 從errors到pkg-errors詳解Go語言中的錯(cuò)誤處理指南

    從errors到pkg-errors詳解Go語言中的錯(cuò)誤處理指南

    錯(cuò)誤處理是編程語言中的重要組成部分,它直接影響程序的可靠性和可維護(hù)性,本文將深入探討Go語言中的錯(cuò)誤處理,從標(biāo)準(zhǔn)庫(kù)的errors包到第三方的pkg-errors庫(kù),幫助開發(fā)者掌握錯(cuò)誤處理的最佳實(shí)踐,提高代碼的質(zhì)量和可維護(hù)性
    2026-04-04
  • Go語言基礎(chǔ)學(xué)習(xí)之map的示例詳解

    Go語言基礎(chǔ)學(xué)習(xí)之map的示例詳解

    哈希表是常見的數(shù)據(jù)結(jié)構(gòu),有的語言會(huì)將哈希稱作字典或者映射,在Go中,哈希就是常見的數(shù)據(jù)類型map,本文就來聊聊Golang中map的相關(guān)知識(shí)吧
    2023-04-04
  • 詳解簡(jiǎn)單高效的Go?struct優(yōu)化

    詳解簡(jiǎn)單高效的Go?struct優(yōu)化

    這篇文章主要為大家介紹了簡(jiǎn)單高效的Go?struct優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Go語言jwt跨域鑒權(quán)的實(shí)現(xiàn)實(shí)例

    Go語言jwt跨域鑒權(quán)的實(shí)現(xiàn)實(shí)例

    本文詳細(xì)的介紹了JWT的基本概念,包括JWT的組成部分和簽名方法,及生成和解析JWT和設(shè)置認(rèn)證中間件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • Go語言數(shù)據(jù)結(jié)構(gòu)之選擇排序示例詳解

    Go語言數(shù)據(jù)結(jié)構(gòu)之選擇排序示例詳解

    這篇文章主要為大家介紹了Go語言數(shù)據(jù)結(jié)構(gòu)之選擇排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 優(yōu)雅管理Go?Project生命周期

    優(yōu)雅管理Go?Project生命周期

    這篇文章主要為大家介紹了如何優(yōu)雅的管理Go?Project生命周期,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Go整合ElasticSearch的示例代碼

    Go整合ElasticSearch的示例代碼

    這篇文章主要介紹了Go整合ElasticSearch的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Golang初始化MySQL數(shù)據(jù)庫(kù)方法淺析

    Golang初始化MySQL數(shù)據(jù)庫(kù)方法淺析

    這篇文章主要介紹了Golang初始化MySQL數(shù)據(jù)庫(kù)的方法,數(shù)據(jù)庫(kù)的建立第一步即要初始化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-05-05

最新評(píng)論

喜德县| 嘉善县| 巴马| 缙云县| 丰镇市| 黄平县| 交口县| 上蔡县| 凤山市| 靖宇县| 收藏| 肇庆市| 南华县| 辽宁省| 灵川县| 武邑县| 天镇县| 黔西| 五台县| 龙井市| 南江县| 广安市| 浮山县| 莎车县| 泾川县| 吴堡县| 永胜县| 平塘县| 尼玛县| 蒲江县| 邵阳县| 盘锦市| 大悟县| 政和县| 连山| 丹东市| 平塘县| 武乡县| 长垣县| 桦甸市| 揭阳市|