首頁 >後端開發 >Golang >如何在Go中模擬導入的包函數以進行有效的測試?

如何在Go中模擬導入的包函數以進行有效的測試?

Linda Hamilton
Linda Hamilton原創
2024-12-18 09:41:10232瀏覽

How Can I Mock Imported Package Functions in Go for Effective Testing?

模擬從Go 中的套件導入的函數

在測試使用從外部套件導入的函數的Go 方法時,可能需要模擬這些外部函數以進行有效的測試。一種方法是重構程式碼並引入中間函數調用,而不是直接調用外部函數。

在提供的範例中:

import x.y.z

func abc() {
    ...
    v := z.SomeFunc()
    ... 
}

建立一個 func 類型的新變數 zSomeFunc 和使用外部函數 z.SomeFunc 初始化。然後,讓您的套件呼叫 zSomeFunc 而不是 z.SomeFunc。

var zSomeFunc = z.SomeFunc

func abc() {
    // ...
    v := zSomeFunc()
    // ...
}

現在,在您的測試中,您可以為 zSomeFunc 指派一個不同的函數,該函數在測試中定義並傳回預定義值,或執行特定操作。這允許您模擬外部函數的行為以進行測試。

func TestAbc(t *testing.T) {
    // Save the original function and restore it at the end of the test.
    old := zSomeFunc
    defer func() { zSomeFunc = old }()

    zSomeFunc = func() int {
        // Do whatever you want to do and return whatever value you need.
        return 1
    }

    // Call the tested function.
    abc()

    // Test the expected behavior.
}

或者,您可以建立 x.y.z 套件的模擬實現,並使用 Go 模擬框架專門模擬 SomeFunc() 函數.

以上是如何在Go中模擬導入的包函數以進行有效的測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn