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

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

Susan Sarandon
Susan Sarandon原创
2024-12-09 18:57:26375浏览

How to Mock Struct Method Calls in Go Tests Without Interfaces?

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

问题:

如何模拟Go 测试用例中结构体的方法调用,无需在源代码中引入接口代码?

代码示例:

type A struct {}

func (a *A) perfom(string){
...
...
..
} 

var s := A{}
func invoke(url string){
   out := s.perfom(url)
   ...
   ...
} 

答案:

要模拟结构体的方法调用,一方法是使用模拟对象。

使用 Mock 的解决方案对象:

  1. 创建一个 Performer 接口,定义要模拟的方法。
  2. 创建 Performer 接口的真正实现 A。
  3. 创建一个Performer接口的mock实现AMock。
  4. 将mock实现传递给测试中的invoke函数case.

示例代码:

type Performer interface {
    perform()
}

type A struct {}

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

type AMock struct {}

func (a *AMock) perform () {
    fmt.Println("mocked method")
}

func caller(p Performer) {
    p.perform()
}

在测试用例中,将模拟实现注入到调用函数中:

func TestCallerMock(t *testing.T) {
    mock := &AMock{}
    caller(mock)
}

在真正的代码中,将真正的实现注入到invoke函数中:

func RealInvoke(url string) {
    a := &A{}
    out := a.perform(url)
}

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

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