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

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

DDD
DDD原创
2024-12-13 13:13:09117浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn