Skip to content

Commit 403e835

Browse files
author
alex cai
committed
增加单元测试功能
1 parent a977099 commit 403e835

File tree

5 files changed

+74
-5
lines changed

5 files changed

+74
-5
lines changed

README.md

+37
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ go-db-models
2727
- 根据某个字段查询单行记录的函数,例如根据id字段进行查询
2828
- 多行结果查询函数
2929
- 返回多行结果时,可以选择生成list(默认)或map格式
30+
- 单元测试文件`*_tb_gen_test.go`
3031

3132
`*_tb_gen.go`文件样例如下:
3233

@@ -115,6 +116,42 @@ func AdProjectQuery(db *sql.DB, queryString string) (ad_project []*AdProjectTabl
115116
}
116117
```
117118

119+
## 生成单元测试文档
120+
121+
在生成相应的结构和查询函数的同时,也会生成相应的单元测试文件,单元测试文件的文件名如`*_tb_gen_test.go`,连接数据库时,使用了一个`testGetDb`的函数,需要在外部自己实现,如`vim init_test.go`:
122+
123+
```go
124+
package models
125+
126+
import (
127+
"database/sql"
128+
"fmt"
129+
_ "github.com/go-sql-driver/mysql"
130+
)
131+
132+
const (
133+
testHost string = "dsp-dev-go"
134+
testDB string = "dsp_sys"
135+
testUser string = "dsp_sys"
136+
testPassword string = "Dsp_sys-pwd"
137+
testPort int = 3306
138+
)
139+
140+
// 获取数据库连接
141+
// 单元测试文件会调用该方法获得数据库链接
142+
func testGetDb() *sql.DB {
143+
// Open database connection
144+
conn_string := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", testUser, testPassword, testHost, testPort, testDB)
145+
146+
db, err := sql.Open("mysql", conn_string)
147+
if err != nil {
148+
panic(err)
149+
}
150+
151+
return db
152+
}
153+
```
154+
118155
## Json数据表定义文件
119156

120157
如果只是希望生成部分的数据表,则可以使用该文件。该文件的结构如:

help.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package main
22

33
const (
4-
versionText = "go-db-models v1.0"
4+
versionText = "go-db-models v1.1"
55

66
usageText = `GOMODELSSCAN
77
根据定义从数据库生成定义结构,每个数据表生成一个对应go文件,包括数据结构定义,及两种基本的查询功能,文件名和数据表名对应。如果json-filepath为空,则生成所有的数据表的结构体。

models/gen_file.go

+27
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,33 @@ func GenFile(table ParseTable) error {
6060
return nil
6161
}
6262

63+
// 生成各个数据表的测试文件:*_tb_gen_test.go
64+
func GenTestFile(table ParseTable) error {
65+
outFile := table.Name + "_tb_gen_test.go"
66+
fout, err := os.Create(outFile)
67+
if err != nil {
68+
return err
69+
}
70+
defer fout.Close()
71+
72+
fnMap := template.FuncMap{
73+
"AddBackquote": AddBackquote,
74+
"Format2Title": Format2Title,
75+
"Format2StructTag": Format2StructTag,
76+
"Format2StructName": Format2StructName,
77+
}
78+
code, err := template.New("gomodels").Funcs(fnMap).Parse(testCodeTemplate)
79+
if err != nil {
80+
return err
81+
}
82+
83+
if err := code.Execute(fout, table); err != nil {
84+
return err
85+
}
86+
87+
return nil
88+
}
89+
6390
// 将下划线分割的字符串改为驼峰格式的字符串
6491
// 如:hello_world => HelloWorld
6592
func Format2StructName(str string) string {

models/parse_table.go

+6
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@ func ParseTablesStruct(tables []Table, packageName string, modelsConf *JsonConf)
135135
return nil, err
136136
}
137137

138+
// 生成代码文件
139+
err = GenTestFile(ptable)
140+
if err != nil {
141+
return nil, err
142+
}
143+
138144
parseTables = append(parseTables, ptable)
139145
}
140146

models/template.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ func do{{.Name|Format2StructName}}Query(db *sql.DB, queryString string) ({{.Name
8787
}
8888
defer rows.Close()
8989
90+
{{if .MapIndex.Name}}{{.Name}} = make(map[{{.MapIndex.Type}}]*{{.Name|Format2StructName}}Table){{end}}
9091
for rows.Next() {
9192
var oneRow = &{{.Name|Format2StructName}}Table{}
9293
err = rows.Scan( {{range $k, $v := .Fields}}
@@ -97,10 +98,8 @@ func do{{.Name|Format2StructName}}Query(db *sql.DB, queryString string) ({{.Name
9798
}
9899
99100
{{if .MapIndex.Name}}
100-
{{.Name}}[oneRow.{{.MapIndex.Name|Format2StructName}}] = oneRow
101-
{{else}}
102-
{{.Name}} = append({{.Name}}, oneRow)
103-
{{end}}
101+
{{.Name}}[oneRow.{{.MapIndex.Name|Format2StructName}}] = oneRow{{else}}
102+
{{.Name}} = append({{.Name}}, oneRow){{end}}
104103
}
105104
106105
return {{.Name}}, nil

0 commit comments

Comments
 (0)