在测试使用从外部包导入的函数的 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中文网其他相关文章!