首页 > 后端开发 > Golang > 如何在没有接口的 Go 测试用例中模拟结构体方法?

如何在没有接口的 Go 测试用例中模拟结构体方法?

DDD
发布: 2024-12-20 17:52:10
原创
641 人浏览过

How to Mock Struct Methods in Go Test Cases Without Interfaces?

Go 测试用例中模拟结构体方法

Go 中无需在源码中引入接口即可实现结构体方法的模拟调用。具体方法如下:

模拟示例结构和方法

考虑以下结构和方法:

type A struct {}

func (a *A) perfom(string){
...
...
..
}
登录后复制

测试用例中的模拟

模拟执行方法进行测试案例:

  1. 创建模拟接口:定义一个代表要模拟的方法的接口。
type Performer interface {
    perform(string)
}
登录后复制
  1. 创建模拟和真实实现: 实现模拟和真实实现的接口struct.
type AMock struct {}

func (a *AMock) perform(string) {
    // Mocked behavior
}

type A struct {}

func (a *A) perform(string) {
    // Real implementation
}
登录后复制
  1. 使用依赖注入:将模拟或真实实现作为参数传递给被测试的函数。
func invoke(url string, p Performer) {
    out := p.perfom(url)
    ...
    ...
}
登录后复制
  1. 注入 Mock测试: 在您的测试用例中,将模拟实现注入到调用函数中。
func TestInvokeWithMock(t *testing.T) {
    var amok = &AMock{}
    invoke("url", amok)
    // Verify mock behavior (e.g., assert it was called with the correct argument)
}
登录后复制
  1. 在生产代码中注入真实实现: 在您的生产中代码,将结构的实际实现注入到调用中函数。
func TestInvokeWithReal(t *testing.T) {
    var a = &A{}
    invoke("url", a)
    // No need for verification since it's the real implementation
}
登录后复制

其他选项

像 [testify/mock](https://godoc.org/github.com/stretchr/ testify/mock)提供更强大的模拟功能,允许您控制模拟行为并验证方法调用。

以上是如何在没有接口的 Go 测试用例中模拟结构体方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

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