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

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

Susan Sarandon
发布: 2024-12-09 18:57:26
原创
373 人浏览过

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

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