在 Go 中,測試依賴從外部套件導入的函數的函數可能具有挑戰性。考慮以下範例:
import x.y.z func abc() { ... v := z.SomeFunc() ... }
我們可以在 Go 中模擬 z.SomeFunc() 嗎?
是,帶有簡單的程式碼修改。透過引入函數類型變數 zSomeFunc 並使用 z.SomeFunc 對其進行初始化,包碼可以呼叫該變數而不是 z.SomeFunc()。這允許我們在測試期間模擬導入的函數。
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中文網其他相關文章!