首頁 > 後端開發 > Golang > 如何管理測試依賴項的初始化程式碼

如何管理測試依賴項的初始化程式碼

WBOY
發布: 2024-02-09 18:00:15
轉載
661 人瀏覽過

如何管理測試依賴項的初始化程式碼

php小編新一將為您介紹如何管理測試依賴項的初始化程式碼。在進行軟體開發時,往往需要使用各種測試工具和框架,而這些工具和框架可能需要一些初始化程式碼來進行設定和準備工作。管理這些初始化程式碼的方式對於測試的可維護性和可擴充性非常重要。以下將為您詳細介紹如何管理測試依賴項的初始化程式碼,以幫助您更好地進行軟體測試工作。

問題內容

我有一個日誌包裝器(在下面使用 logrus 實作),並且我正在使用這個套件來記錄我的應用程式。我執行此操作的方法是透過依賴項注入將記錄器變數傳遞給每個所需的套件。

在這裡,當為每個套件編寫測試案例時,我必須編寫一些程式碼來初始化記錄器套件。我們如何避免為每個使用記錄器的套件的測試案例編寫初始化程式碼?

記錄器/log.go

type logger interface {
    info(args ...interface{})
    infof(format string, keyvals ...any)
    infowithfields(fields map[string]interface{}, msg ...interface{})

    debug(args ...interface{})
    debugf(format string, keyvals ...any)
    debugwithfields(fields map[string]interface{}, msg ...interface{})
}
登入後複製

app_test.go

func setupLogrusLogger() (*bytes.Buffer, Logger) {
    buf := &bytes.Buffer{}
    logrusLogger := log.New()
    logrusLogger.Out = buf
    logrusLogger.Formatter = &log.JSONFormatter{}
    return buf, NewLogrusLogger(logrusLogger)
}

func TestSomething(t *testing.T) {
  // buf can be used to inspect what gets logged if required
  buf, logger := setupLogrusLogger()
  Something(logger)
}
登入後複製

在這裡,對於每個使用記錄器的包,我必須透過定義類似於 setuplogruslogger 的內容來初始化記錄器。有什麼方法可以避免為我正在為其編寫測試的每個包單獨編寫此內容?

解決方法

匯出依賴初始化函數並在非 _test.go 檔案中聲明,以便其他套件可以導入並重複使用它。如果您想將測試邏輯與套件的正常程式碼分開,您可以將初始化函數移至提供測試實用程式的套件中。

並且,只要您僅從_test.go 檔案(而不是普通檔案)匯入此類測試實用程式包,測試實用程式程式碼就不會使其進入實際程式的編譯二進位檔案中。

此類測試實用程式套件的範例可以在標準庫中找到:

net/http/httptest

#

套件 httptest 提供了用於 HTTP 測試的實用程式。

net/internal/socktest

#

socktest 套件提供了用於套接字測試的實用程式。

os/exec/internal/fdtest p>#

套件 fdtest 提供測試助手,用於跨 exec 使用檔案描述子。

testing/quick

#

Package Quick 實作了實用函數來幫助進行黑盒測試。

testing/fstest

#

軟體包 fstest 實現了對檔案系統測試實作和使用者的支援。

testing/iotest

#

iotest 套件實作了主要用於測試的讀取器和寫入器。

以上是如何管理測試依賴項的初始化程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板