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