Go语言单元测试方法

目录

 

学习背景

单元测试方法

问题及解决方案


学习背景

本学期系统分析与设计一课中,我负责小组后端单元测试部分。为此我学习了Go语言对于GET方法的简单单元测试手段。以下是我的学习心得体会。

单元测试方法

本次项目中我负责的是后端API与数据库的交互的测试,其基本操作逻辑为:

  • 与后端数据库建立连接
  • 调用对应API,从数据库获取json数据包
  • 解析数据包,与我们的期望值进行对比,查看API是否正常工作

我首先import了Go语言自带的httptest包

import(
    "net/http/httptest"
)

利用包中的http.NewRequest()函数与后端数据库建立连接,并通过httptest.NewRecorder()函数获取到从后端返回的json数据包

r, _ := http.NewRequest("GET", "/v1/task/?userId=2", nil)
w := httptest.NewRecorder()
beego.BeeApp.Handlers.ServeHTTP(w, r)

接下来我利用Go语言自带的json数据处理库来对获取到的json数据进行解析,将其变成我们所需要的数据:

var tasks []models.Task
readBuf,_ := ioutil.ReadAll(w.Body)
json.Unmarshal(readBuf, &tasks)

最后我通过Convey函数来将获取到的数据与期望值进行比较,如果没有差错,则证明API正常工作。

    Convey("Subject: Test Station Endpoint\n", t, func() {
	        Convey("Status Code Should Be 200", func() {
	                So(w.Code, ShouldEqual, 200)
			})
			Convey("Task Id should Be 15", func() {
				So(tasks[1].Id, ShouldEqual, 15)
			})
			Convey("User Id should Be 2", func() {
				So(tasks[1].Userid, ShouldEqual, 2)
			})
			Convey("Reward should Be  1", func() {
				So(tasks[1].Reward, ShouldEqual, 1)
			})
			Convey("Max Accept should Be 10", func() {
				So(tasks[1].MaxAccept, ShouldEqual, 10)
			})
	})

当所有的convey都是pass时,则证明API并没有发生问题,测试完成。

问题及解决方案

  • 在进行单元测试的过程中,我需要详细的了解每一个API的功能作用以及运行逻辑,这一部分光是看文字描述或是各种模型是很难完整理解的,所以我使用了Swagger Editor​​​​​​​这一个网站,他能够将我的们的api.yaml文档转化为可视化列表,让我能够更直观的了解各个API的运行逻辑,后端返回数据的格式等等。

通过点击每一个API,你就能看到对应的数据格式,具体功能等信息

  • 在测试的过程中,由于前端仍然在开发过程中,也会对数据进行相应的操作,经常导致我对应的Convey信息发生错误。为了避免这一问题,我们在后端建立了两个数据库,一个用于前端开发,另外一个就用于我的后端测试。这样我们各自进行自己的工作,即保证了效率,也防止了数据的冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值