在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中文網其他相關文章!