[zeromicro/go-zero]怎么做单元测试和集成测试? 可否在文档部分增加一些说明

2023-12-21 329 views
8

比如我想实现一个登录接口

  1. 写好 api 文件, 生成 api 代码

    service sys-api {
    @handler UserLogin
    post /api/sys/user/login (loginReq) returns (loginResp)
    }
  2. 写好 ddl 文件, 生成模型代码

    SysUserModel interface {
        Insert(data SysUser) (sql.Result, error)
        FindOne(id int64) (*SysUser, error)
        FindOneByName(name string) (*SysUser, error)
        Update(data SysUser) error
        Delete(id int64) error
    }

代码都是自动生成的, go-zero 库中有不错的测试覆盖, 所以这里单元测试暂时不关心。

但这时是实践 BDD 的好机会, 此时登录功能是不通的, 需要改 logic 里面的代码。 修改后登录功能工作的 api, route,model 全工作, BDD 测试变绿。

请问有啥好的实践吗?目录结构, 代码生成这块有考虑吗?使用哪些库可以较好的配合 go zero 工作?

回答

8

我想在后台启动一个 server 在不同的端口,然后发 http 请求去测试。 如果在主线程启动的话,会阻塞后续的测试代码, 所有我有如下的方式启动:

go server.Start()

现在总体流程工作, 启动测试服务器 -》 跑测试 -》 关闭测试服务器, 如下面日子的的第一句和最后一句。 现在问题是发 http 请求时总是拒绝连接, 有人知道啥情况吗?

使用 go server.Start() 的方式运行, 服务器能正常监听吗?

start test server at 0.0.0.0:18888...
User login With right username and password 
  should be ok
  /home/ming/learn/go/gocms/services/sys/api/user_test.go:25
Response Info:
  Error      : Post "http://0.0.0.0:18888/api/sys/user/login": dial tcp 0.0.0.0:18888: connect: connection refused
  Status Code: 0
... 省略部分错误信息
/home/ming/learn/go/gocms/services/sys/api/user_test.go:44
------------------------------
stop test server at 0.0.0.0:18888...
9

image

2

已经解决, 原因是 go server.Start() 协程还没有ready, 测试协程的请求已经过去, 故连接不少。 测试协程等待一秒即可。