首页 > 后端开发 > Golang > 如何在 Go 中模拟外部函数进行单元测试?

如何在 Go 中模拟外部函数进行单元测试?

Mary-Kate Olsen
发布: 2025-01-02 18:57:37
原创
250 人浏览过

How Can I Mock External Functions in Go for Unit Testing?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板