首页 > 后端开发 > Golang > 如何在没有接口的情况下模拟 Go 中的结构方法调用?

如何在没有接口的情况下模拟 Go 中的结构方法调用?

DDD
发布: 2024-12-13 13:13:09
原创
123 人浏览过

How to Mock Struct Method Calls in Go without Interfaces?

Go 中的模拟结构体方法调用

在 Go 中,在不引入接口的情况下模拟结构体的方法调用可以通过一种称为“双”模式。实现方法如下:

1.创建执行者接口:

定义一个封装要模拟的方法的接口。

type Performer interface {
    perform()
}
登录后复制

2.使用模拟和真实实现实现接口:

创建两个结构体,一个用于实际实现 (A),另一个用于模拟 (AMock),它们都实现 Performer 接口。

type A struct{}

func (a *A) perform() {
    fmt.Println("real method")
}

type AMock struct{}

func (a *AMock) perform() {
    fmt.Println("mocked method")
}
登录后复制

3.使用依赖注入:

在您的 invoke() 函数中,使用依赖注入来传递 Performer 接口,而不是直接访问全局变量。

func invoke(p Performer) {
    p.perform()
}
登录后复制

4 。在测试中注入 Mock:

在您的测试用例中,将 AMock 实例注入到 invoke() 函数中。这将允许您模拟模拟方法的行为。

// Create a mock performer
m := &AMock{}

// Inject the mock into invoke
invoke(m)
登录后复制

5.验证模拟调用(可选):

如果您使用的是 testify/mock 等模拟库,您可以进一步验证是否使用预期的参数和频率调用了模拟方法。

// Assert that the mocked method was called
mock.AssertCalled(t, "perform", "argument1", "argument2")
登录后复制

通过利用 double 模式,您可以有效地模拟 Go 中结构体的方法调用,提供彻底测试所需的灵活性和隔离性。

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

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