go项目测试基础以及项目环境搭建相关问题

46 阅读4分钟

测试基础:

软件研发过程:需求分析->概要设计->详细设计->编码->单元测试->集成测试->系统测试

单元测试:是完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。

集成测试:通过测试发现与模块接口有关的问题。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成(除非软件规模很小),而采用增量集成。

回归测试:当发现并修改缺陷后,或在软件中添加新的功能后,重新测试。用来检查被发现的缺陷是否被改正,并且所做的修改没有引发新的问题。回归测试可以通过人工重新执行测试用例,也可以使用自动化的工具来进行。

使用Golang进行测试的一些规则:

  • 所有测试文件以_test.go结尾
  • 测试函数为func TestXxxx(){}
  • 初始化逻辑放到TestMain中进行一些数据装载,配置初始化等前置工作,以及测试后的资源回收工作  

测试时合理利用一些开源的测试包,例如github.com/strechr/testify/assert,在func代码中,可以:

func TestXxx(){{

    output := HelloTom()

    expectOutput := “Tom”

    assert.Equal(t, expectOutput, output)

   }

如何评估单元测试的水平? 代码覆盖率

什么是Mock测试? mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为。比如说你需要调用B服务,可是B服务还没有开发完成,那么你就可以将调用B服务的那部分给Mock掉,并编写你想要的返回结果。

在使用 mock 进行接口测试时,一般要做两件事情,即打桩和调桩。打桩就是创建mock 桩,指定 API 请求内容及其映射的 mock 响应内容;所谓调桩就是被测服务来请求 mock 桩并接收 mock 响应。  

项目的分层结构:

516.png

数据层会屏蔽底层数据差异,逻辑层输出核心业务逻辑就是话题页面

MVC分层设计模式: 将项目分为三个视图:模型(Model)、视图(View)和控制器(Controller) 1.view层: 用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。主要作用是界面展示,接收请求,分发请求。

2.service层:实现业务的主要逻辑,是系统架构中体现核心价值的部分。将一个业务中所有的操作封装成一个方法,同时保证方法中所有的数据库更新操作,即保证同时成功或同时失败。避免部分成功部分失败引起的数据混乱操作。

3.Dao层:也称为是持久层,其功能主要是负责数据库的访问(可以访问数据库、二进制文件、文本文件等),是对数据库,而不是对数据的操作。持久层的目的就是,完成对象数据和关系数据的转换。

三层架构的出现是为了降低耦合度,在这里,使用面向抽象编程,也就是上层对下层的调用,直接通过接口来完成,下层对上层的真正服务提供者,是下层实现的接口实现类。

Gin高性能Go Web框架

项目来自于课程资料:github.com/Moonlight-Z…

  1. 删除了原始go.mod文件,导致重新go mod init后无法运行项目。在go.mod文件中存在require文件,重新生成后这些文件会不存在

  2. 将原来github.com/源的文件都转换成了本地文件,在运行时go无法获取到相关文件。本地化导包还需要继续学习。

  3. 成功运行程序后,无法登录mysql。自查后发现1)新服务器没有安装MYSQL,2)新安装的MYSQL需要修改密码 sudo mysql -u root -p

     mysql> use mysql;
     mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
     mysql> flush privileges;
     mysql> exit;
    

修改/repository/db_init.go文件中密码相关 dsn := "root:123456@tcp(127.0.0.1:3306)/community?charset=utf8mb4&parseTime=True&loc=Local"

最后发现,mysql缺少community数据库,项目无法运行。