目录
学习背景
本学期系统分析与设计一课中,我负责小组后端单元测试部分。为此我学习了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信息发生错误。为了避免这一问题,我们在后端建立了两个数据库,一个用于前端开发,另外一个就用于我的后端测试。这样我们各自进行自己的工作,即保证了效率,也防止了数据的冲突。