如何用golang编写单元测试用例

本文介绍了如何在Golang中编写单元测试,特别是针对涉及`net.dial`方法和依赖第三方包的情况。通过创建mock服务和利用gomock库,详细展示了如何隔离并测试代码,确保其正确性。同时,讨论了使用全局变量在并发测试中的问题及解决方案。
摘要由CSDN通过智能技术生成

最近帮忙给一个项目补充单元测试,有一些单测比较不好写, 到网上查了一下,发现有很多有意思的写法,特此总结一下

net.dial 方法的单测

如果我们代码里面使用了net.Dial()去访问外部的tcp or udp 端口,然后使用返回的Conn对象去处理里面的数据,我们该如何对这个Conn对象进行mock呢?

  1. 最好想的办法是自己实现一个server端,使用net.Listen()本地的一个端口,并且撰写自己的handler方法,在handler方法里面返回想要的值。最后在单测里面直接调用这个端口就可以在返回的conn对象中获取到mock的值了。
    下面写一个简单的例子
go func() {
      conn, err := net.Dial("tcp", 3000)
      if err != nil {
          xxx
      }
      defer conn.close()
      xxx
}
l, err := net.Listen("tcp", 3000)
defer l.Close()
for {
     conn, err := l.Accept()
     defer conn.Close()
     handle(conn)
}
  1. 其实最简单的方法是这种
server, client := net.Pipe()
go func(){
    server.Close()
}()

client.Close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值