day02 go协程依赖测试 | 青训营笔记

65 阅读3分钟

本日重点

  • go的并发编程

  • go依赖

  • 测试

  • 简单web服务器

测试

单元测测可以保证代码的质量 输入,测试单元,输出 测试单元包含函数,模块等一系列都可以称为测试单元。

这里老的代码也有单元测试,所以在写的新的代码之后如果老的单元测试也能跑通,就说明新的代码并没有改变源代码的功能,这就是保证质量的概念。

可以提升效率,在本地编写单元测试就可以发现比较简单的错误,不用在部署的时候再发现。

单元测试使用

测试文件以_test.go结尾,func TestXxx(*testing.T),这个函数会在测试前帮我们做数据装载,配置初始化等前置工作。

import (
   "testing"
)

func HelloTom() string {
   return "Jerry"
}
func TestHelloTom(t *testing.T) {
   output := HelloTom()
   expectOutput := "Tom"
   if output != expectOutput {
      t.Errorf("Expect %s do not match actual %s", expectOutput, output)
   }
}
/*
=== RUN   TestHelloTom
    hello_test.go:14: Expect Tom do not match actual Jerry
--- FAIL: TestHelloTom (0.00s)
 */
 
/*
=== RUN   TestHelloTom
--- PASS: TestHelloTom (0.00s)
PASS
*/

评估单元测试-覆盖率

也就是衡量代码是否通过了足够的测试用例,通过的越多也就说明代码质量越高。 一般项目中覆盖率在50%到60%之间,测试分支相互独立,全面覆盖。测试单元的粒度足够小,函数单一职责。

单元测试依赖

幂等:每次同样输入的结果一样。 我们项目中有时会依赖本地文件,数据库,缓存等。

项目

这里实现的是一个简单的web服务项目。给这样一个前台做一个后端服务器。简单来说就是处理一些请求。这里我们只是简单的实现功能,所以请求和实体结构体也只是简单的抽象。

image.png 项目结构类似Java的MVC结构,视频中使用本地文件放置数据,然后给本地文件设置一个类似索引的map。这点挺有意思的,可以将文件中的数据直接读入内存,不用每次再去读文件。

使用了gin框架搭建web服务器。这里视频讲的极差,貌似老师有什么事情,再加上收音一直不好,真的很难坚持听下去。可以看下官方文档快速入门 | Gin Web Framework (gin-gonic.com)

项目中使用了数据库,这里gorm查询有些尴尬呀,纯纯的字符串拼接。

func (*TopicDao) QueryTopicById(id int64) (*Topic, error) {
   var topic Topic
   err := db.Where("id = ?", id).Find(&topic).Error
   if err != nil {
      util.Logger.Error("find topic by id err:" + err.Error())
      return nil, err
   }
   return &topic, nil
}

总结

视频中老师说的数据存放在本地,pull代码的设置数据在数据库,而且其中使用了数据库,和视频讲的有些不同。

两个视频只给了项目代码,前面的携程,单元测试均没有相应代码,给的学习文档也是官方的,项目给的代码和视频中的也不一样,我觉得今天的视频相当的敷衍。