为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 golang 中创建包含 http 客户端的结构模拟?

如何在 golang 中创建包含 http 客户端的结构模拟?

Go
牛魔王的故事 2022-11-23 14:10:32
让我们看一下这个例子:套餐A:type Client struct {    log    bool             client *http.Client }type Report struct {    cli *Client}套餐B:type H struct {    r *A.Report    ............... }现在我想在包 B 中编写一个测试用例,它需要包 A 的模拟报告。包 B 使用包 A 报告进行函数调用。例如:H.r.functionA()本质上,我需要为上面的例子制作一个模拟函数。但是如何为包 B 创建一个模拟报告,以便我可以在包 A 测试文件中使用它?
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

如果你想编写模拟,首先你需要接口。你不能用结构来做到这一点。在上面的示例中,您使用的是结构。以下是您需要从functionA()实现该Report接口的类型上获得模拟响应的内容。在包B中,你应该定义一个接口


type Report interface {

    functionA()

}

现在你有了一个接口,你需要改变你的类型H来保存这个接口,而不是你在包 A 中定义的结构。


type H struct {

r Report

............... 

}

现在您可以提供接口的模拟实现Report


type mockReport struct {

}


func (m *mockReport) functionA() {

// mock implementation here

}

在您创建类型实例时的测试文件中H,只需将mockReport实例提供给它


h := H{r: &mockReport{}}

h.r.functionA() // this will call the mocked implementation of your 

                //function


查看完整回答
反对 回复 2022-11-23
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号