前面已经说明beego使用的主要部分,另外beego还提供了一些其他内容,比如日志,接口文档,测试,以及前端的一些设置等,这里罗列出之前没有说明的一些,如果有其它的再补充说明。
日志
日志设置可以在main.go文件中加入,在init函数中调用。需要引入模块github.com/astaxie/beego/logs。
1 | func initLog() { |
在日志设置中,首先是从conf文件中获取当前的运行模式,一般会有开发、上线、测试等。然后将log重置。接着是设置输出引擎,主要有AdapterConsole(输出到控制台)、AdapterFile(输出到文件)等,另外其它引擎和参数参考使用手册即可。
然后需要设置日志级别。级别越低会打印更多信息,一般情况有错误、警告、普通信息、debug调试信息等。不同的信息在beego中对应不同的输出函数,比如:
1 | beego.Emergency("this is emergency") |
接下来是设置日志是否输出文件名和行号,默认是不输出。这种输出可以设置输出深度,因为存在调用,所以通过设置输出深度来输出调用的信息。
API文档
beego提供了可以生成api文档的方式。beego通过注解路由的方式生成swagger标准的json格式,从而能通过swagger应用的方式展示给用户。
生成api文档的方式是在运行的时候加上参数
1 | bee run -downdoc=true -docgen=true |
其访问页面如下:
这里可以看到有一些说明,这个在router.go顶部进行注释:
1 | // @APIVersion 1.0.0 |
其访问地址默认是swagger为URI的,这里改成了doc,在router.go的init中修改:
1 | beego.BConfig.WebConfig.StaticDir["/doc"] = "swagger" |
swagger页面根据api中的不同router分类,可以看到project下面有CURD操作。
对于每一个操作下面都可以展开看到参数和说明,也可以直接通过页面访问接口。
测试用例
对于代码需要自己做单元测试。测试对于beego来说主要是api接口提供的Controller层,以及逻辑处理和orm的model层。对于model层直接import对应的模块然后调用函数测试返回值即可,这里说明一下api的测试。测试也需要有一个base.go文件,该文件主要用于提供测试需要用的一些基础操作,比如连接数据库,每次清空数据库,添加一些依赖数据的函数,判断结果的函数,以及模拟请求等。
init函数中连接数据库
1 | func init() { |
其中显示获取当前文件路径,然后定位到app路径,然后启动测试。
在每个函数测试之前应该清空数据库,所以设置一个清空数据库的函数,在每个测试用例中写入。
1 | func setUp() { |
发送请求的函数
1 | func sendRequest(t *testing.T, method, url string, params *Params) (rsp *controllers.APIRsp) { |
由于有些请求比如查询需要有数据,这时应该先提供数据插入的函数。
1 | func addEntity(v interface{}) (id int64, err error) { |
对于响应内容,我们需要判断是否正确,一般是要给出等于或者不等于的判断。
1 | func assertEqual(t *testing.T, a, b interface{}, msg string, intf ...interface{}) { |
下面是具体的测试用例,以上节的TestUser为例,用例需要以Test开头。
1 | func TestUser_Query_By_Name(t *testing.T) { |
另外对于有第三方调用的http请求使用mock的方式模拟数据。
1 | func registerTestAPIMock(method, url, rsp string) { |
测试用例的执行可以按函数执行,也可以按文件执行:
go test -v -test.run + 函数
go test -v 测试文件
前端设置
Controller中已经说明了view中存放html主页,以及在static中存放js、css等文件。这里说明可以通过设置开启静态文件的列表显示,在router.go中加入设置:
1 | beego.BConfig.WebConfig.DirectoryIndex = true |