在測試使用從外部套件導入的函數的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中文網其他相關文章!