首頁 >後端開發 >Golang >如何在 Go 中模擬外部函數進行單元測試?

如何在 Go 中模擬外部函數進行單元測試?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-02 18:57:37221瀏覽

How Can I Mock External Functions in Go for Unit Testing?

在Go 中模擬外部函數

測試依賴外部套件的函數時,模擬這些外部函數對於建立隔離且可靠的函數至關重要測試。考慮以下範例:

import x.y.z

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

我們可以模擬 z.SomeFunc() 來對 abc() 進行單元測試嗎?

解:重建與模擬

是的,透過簡單的重建就可以模擬 z.SomeFunc() 。引入一個函數類型的變數zSomeFunc,並使用z.SomeFunc進行初始化。然後,在呼叫 z.SomeFunc() 的函數中,改為呼叫 zSomeFunc():

var zSomeFunc = z.SomeFunc

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

在測試期間,將自訂函數指派給 zSomeFunc 以傳回所需的測試行為。例如:

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

    zSomeFunc = func() int {
        // This will be called, do whatever you want to,
        // return whatever you want to
        return 1
    }

    // Call the tested function
    abc()

    // Check expected behavior
}

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

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