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