接下来就是我要将测试放入现在正在进行的api中了
在这次的测试中,我想测试mRequest.Get()会不会回传资料库的所有request的值
而这次测试中,mRequest.Get()十分的单纯
func (r *MRequest) Get() (requests []Request, err error) {
if findErr := r.db.Find(&requests).Error; findErr != nil {
err = findErr
return
}
return
}
而要预期资料库会不会回传所有的值,最直接的就是看,他有没有执行
select * from requests
只要执行了这段sql,就表示他在正常连线下可以取得requests的所有资料
那接着,我们要用
https://github.com/DATA-DOG/go-sqlmock
来对gorm进行mock
这个lib可以对大部分的sql的资料库进行mock,所以就不用自己重新制造轮子来mock里面的method了,而详细的用法可以到上述连结中进行查询
而我们这次使用的是ExpectQuery这个method,他可以帮你检查你是否有执行你想要的sql语法
用法如下
const sqlSelectAll = `SELECT * FROM "requests"`
mock.ExpectQuery(regexp.QuoteMeta(sqlSelectAll)).WillReturnRows(sqlmock.NewRows(nil))
_, err := r.Get()
Expect(err).ShouldNot(HaveOccurred())
这样就可以检查到他是否有执行SELECT * FROM "requests"这段内容了
至於说为什麽要使用regexp.QuoteMeta()这个method,是因为ExpectQuery中,他预设会认爲里面的内容是正规表达式,所以在这句sql语法中的*跟正规表达式里面的符号冲到了,因此如果想要预期里面直接是字串符合的话,就要加上regexp.QuoteMeta()来让你直接是跟这段内容相符,当然你也可以将判断句改为
select \* from "requests"
这样也是可以的
接着只要到model的资料夹下执行
go test .
或是到最外面执行
go test ./...
就可以看到这次测试的结果搂
以下附上这次的commit纪录
https://github.com/kevinyay945/smart-home-backend/tree/v0.3.1
<<: Windows Server 2019 如何安装 IIS 运行 ASP.NET 专案
今天继续来讨论OS 若想要得到当前路径,可以使用os.getcwd()。 import os pat...
其实今天的主题应该算是昨天 High Performance CSS 的延伸。 大家应该都有遇过网...
昨天我们已经把登入画面做好了,大家有没有觉得万事起头难呢? 既然我们已经有登入画面了,当然要有注册...
RL 比较知名的应用场合和研究成果大部分都分布於游戏、自驾车、和机器人领域。事实上 RL 可以有非常...
本篇文章在介绍 celery 的重试策略,如果有问题或是错误,欢迎留言讨论!! 一、简介 稍微在网路...