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

Go測試之.golden文件使用示例詳解

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

Go測試中的.golden 文件是干什么用的?

舉例說明

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

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

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

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

".golden" 文件的命名并沒有一個官方規(guī)定的標準,但是根據一些 Go 語言社區(qū)的約定,".golden" 文件通常被命名為 ".golden" 是因為這個后綴在文件名中很不常見,因此可以很容易地與其他文件進行區(qū)分。

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

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

示例

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

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

// 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)
    }
}

在這個例子中,測試代碼讀取expected_output.golden文件,它的內容可以是Formatted: Hello, World!。然后,測試用例調用FormatString函數并將其輸出與黃金文件中的預期結果進行比較。如果兩者不匹配,測試將失敗并輸出相應的錯誤消息。

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

測試

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

需要對 運行/調試設置做如下修改

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

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

即 需要將預期的內容寫到expected_output.golden中,最后會做一個比較

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

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

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

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

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

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

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

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

下面是一些示例:

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

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

以上就是Go測試之.golden文件使用示例詳解的詳細內容,更多關于Go .golden測試文件的資料請關注腳本之家其它相關文章!

相關文章

  • 淺析Golang中類型嵌入的簡介與使用

    淺析Golang中類型嵌入的簡介與使用

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

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

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

    Go語言中的iota關鍵字的使用

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

    Go實現自動解壓縮包以及讀取docx/doc文件內容詳解

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

    詳解go程序如何在windows服務中開啟和關閉

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

    Golang 實現 Redis系列(六)如何實現 pipeline 模式的 redis 客戶端

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

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

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

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

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

    golang使用RSA加密和解密的實現示例

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

    Go語言實現棧與隊列基本操作學家

    go語言中,并沒有棧與隊列相關的數據結構,但是我們可以借助切片來實現棧與隊列的操作;接下來我們一起實現棧與隊列基本操作,感興趣的可以了解一下
    2022-11-11

最新評論