在套件相關方法中模擬導入函數
為依賴於從外部套件導入的函數的方法編寫測試時,模擬可能變得必要將測試與導入函數的實際實作隔離。在 Go 中,這可以透過簡單的重構來實現。
考慮以下從x.y.z 套件導入和使用函數的方法:
import x.y.z func abc() { ... v := z.SomeFunc() ... }
要模擬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中文網其他相關文章!