首页 > 后端开发 > Golang > 如何有效地模拟Golang中的函数?

如何有效地模拟Golang中的函数?

Linda Hamilton
发布: 2024-12-07 07:51:17
原创
575 人浏览过

How Can I Effectively Mock Functions in Golang?

Golang 中的模拟函数

在 Golang 中,不直接支持在具体类型上声明的模拟函数。但是,有多种策略可以实现类似的功能。

函数值

可以模拟函数值,包括变量、结构体字段或参数。请考虑以下内容:

var Fn = func() { ... }

type S struct {
    Fn func()
}

func F(Fn func())
登录后复制

所有这些实例中的 Fn 都是可模拟的。

接口

模拟接口是首选选项。创建一个代表目标函数方法的接口:

type ProductRepository interface {
    GetProductById(DB *sql.DB, ID int) (p Product, err error)
}
登录后复制

实现此接口的真实版本和模拟版本:

// Real implementation
type ProductStore struct{}

func (ProductStore) GetProductById(DB *sql.DB, ID int) (p Product, err error) {
    // ...
}

// Mock implementation
type ProductRepositoryMock struct {}

func (ProductRepositoryMock) GetProductById(DB *sql.DB, ID int) (p Product, err error) {
    // ...
}
登录后复制

现在可以传递依赖于 ProductRepository 的代码用于生产使用的真实实现和用于测试的模拟实现。

接口模仿

或者,定义一个模仿 *sql.DB 方法的接口,然后使用该接口类型作为函数的参数类型:

type DBIface interface {
    Query(query string, args ...interface{}) (*sql.Rows, error)
    // ...
}

type DBMock struct {}

func (DBMock) Query(query string, args ...interface{}) (*sql.Rows, error) {
    // ...
}

func GetProductByName(DB DBIface, name string) (p Product, err error) {
    // ...
}
登录后复制

这使得DB 参数可模拟。

以上是如何有效地模拟Golang中的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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