6.3 利用Go语言接口进行Mock单元测试

本文介绍了如何利用Go语言的接口进行Mock单元测试,以解决代码对环境的依赖问题。通过定义接口、改造函数、创建Mock结构体和编写测试用例,实现了在不具备真实环境的情况下对代码逻辑进行验证。在示例中,展示了如何定义接口、修改函数参数,以及创建和使用MockObj进行单元测试,确保showTotal函数在Mock环境下返回预期结果。
摘要由CSDN通过智能技术生成

单元测试重点是对代码逻辑进行测试,也就是证明:为什么你的代码是正确的。Mock测试是单元测试中常用的一种手段,特别是对于代码运行时对环境有严重依赖的,可以在不具备相应环境的情况下运行。例如:数据库、中间件、或者第三方接口等情况。

利用接口可以很容易的构造Mock环境,方便对代码进行单元测试。

原有实现

在这个实现中,我们定义了一个Obj的结构体,并且定义了getData方法。这里我们假定getData是从第三方服务中获取数据并进行处理。另外我们有一个showTotal的函数用于调用结构体的方法,并且显示出来,相当于后续的程序处理。

如果我们对showTotal进行单元测试的时候,我们会发现需要构建getData的依赖环境才能进行单元测试,所以此时我们可以使用interface构建一个MockObj来伪造getData返回数据,进行不同的场景测试。

package original

import "fmt"

type Obj struct {
   
    name string
}

// This is a real function to connect third party service, like database
func (o Obj) getData() int {
   
    fmt.Printf("This is [%s] environment\n", o.name)
    // if we fetch data here
    data := map[string]int{
   
        "total": 10,
    }

    return data["total"]
}

func showTotal(o Obj) int {
   
    total := o.getData()
    fmt.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老孙正经胡说

创作不易,感谢您的关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值