Go:表驱动单元测试
2024-10-21 10:17:18
Go:表驱动单元测试
单元测试相当的重要,这几天实习由于单元测试没写好所以被骂了emmm
痛定思痛,立刻上网学习了一下,总算达到了预期的效果,所以写一篇文章记录一下
首先安装gotests
$go get -u github.com/cweill/gotests/...
然后记得添加到PATH里面
之后在goland里面可以直接自动生成表驱动的单元测试
生成代码大概是这个样子
package test import (
"publish_server_receivehook/services"
"reflect"
"testing"
) func TestDealWithData(t *testing.T) {
type args struct {
data []byte
}
tests := []struct {
name string
args args
want map[string]interface{}
}{
// TODO: Add test cases.
//正常情况
{"1",args{data:[]byte(`{
"ref": "refs/heads/master",
"before": "fc5075afcb02fcf9d356d4b1a23348506a522947",
"after": "fc5075afcb02fcf9d356d4b1a23348506a522947",
"compare_url": "",
"commits": [
{
"id": "fc5075afcb02fcf9d356d4b1a23348506a522947",
"message": "123\n",
"url": "http://localhost:3000/ch/git_hook_test/commit/fc5075afcb02fcf9d356d4b1a23348506a522947",
"author": {
"name": "miracle",
"email": "asd471331055@vip.qq.com",
"username": "ch"
},
"committer": {
"name": "miracle",
"email": "asd471331055@vip.qq.com",
"username": "ch"
},
"added": [
"test.txt"
],
"removed": [],
"modified": [],
"timestamp": "0001-01-01T00:00:00Z"
}
],
"repository": {
"id": 1,
"owner": {
"id": 1,
"username": "ch",
"login": "ch",
"full_name": "",
"email": "asd471331055@vip.qq.com",
"avatar_url": "https://secure.gravatar.com/avatar/bdafa8c50b079c7bf7a647de881e3b0b?d=identicon"
},
"name": "git_hook_test",
"full_name": "ch/git_hook_test",
"description": "",
"private": false,
"fork": false,
"parent": null,
"empty": false,
"mirror": false,
"size": 12288,
"html_url": "http://localhost:3000/ch/git_hook_test",
"ssh_url": "miracle@localhost:ch/git_hook_test.git",
"clone_url": "http://localhost:3000/ch/git_hook_test.git",
"website": "",
"stars_count": 0,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"default_branch": "master",
"created_at": "2019-02-17T16:52:44+08:00",
"updated_at": "2019-02-17T17:00:23+08:00"
},
"pusher": {
"id": 1,
"username": "ch",
"login": "ch",
"full_name": "",
"email": "asd471331055@vip.qq.com",
"avatar_url": "https://secure.gravatar.com/avatar/bdafa8c50b079c7bf7a647de881e3b0b?d=identicon"
},
"sender": {
"id": 1,
"username": "ch",
"login": "ch",
"full_name": "",
"email": "asd471331055@vip.qq.com",
"avatar_url": "https://secure.gravatar.com/avatar/bdafa8c50b079c7bf7a647de881e3b0b?d=identicon"
}
}`)}, map[string]interface{}{"repository_name":"ch/git_hook_test","pusher":"ch"}}, //异常情况
{"2",args{data:[]byte(`{"test":"test"}`)}, map[string]interface{}{"repository_name":nil,"pusher":nil}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := services.DealWithData(tt.args.data); !reflect.DeepEqual(got, tt.want) {
t.Errorf("DealWithData() = %v, want %v", got, tt.want)
}
})
}
}
因为我的测试数据比较多,所以代码看来比较多.
其实都是自动生成的,自己在TODO下面添加测试用的数据就可以了。
另外测试数据一定要包含正确的数据以及错误的数据,这样的测试才有意义。
最新文章
- hdu-1179-二分图最大匹配
- sprint2总结
- Django(三)
- C#语句2——循环语句(for穷举、迭代和while循环)
- 动态调用webservice时 ServiceDescriptionImporter类在vs2010无法引用的解决方法
- sort()函数与qsort()函数及其头文件
- 安装apk到虚拟的device
- OC中多线程的一些概念
- Program terminated with signal SIGKILL,Killed
- 桌面管理工具 RedisDesktopManager 0.8.8
- .NET Core开发日志——Linux版本的SQL Server
- Java程序读取Properties文件
- hadoop 用户
- 漫画:高并发下的HashMap
- Eclipse中导入Git项目
- jquery 获取 tagName(JQuery如何得到tagName?)
- JS的排序算法
- Python自动化之Django中间件
- Linux/Unix 怎样找出并删除某一时间点的文件
- Hilite代码高亮工具
热门文章
- BI入门经典(转载)
- SQLite connection strings
- 机器学习(十五)— Apriori算法、FP Growth算法
- javascript时间戳转换成指定格式的日期
- 学习c++的优秀博客(转)
- ES doc_values介绍——本质是field value的列存储,做聚合分析用,ES默认开启,会占用存储空间(列存储压缩技巧,除公共除数或者同时减去最小数,字符串压缩的话,直接去重后用数字ID压缩)
- shingling算法——提取特征,m个hash函数做指纹计算,针对特征hash后变成m维向量,最后利用union-find算法计算相似性
- spring-springMVC-MyBatis整合配置文件
- javascript-JQuery样式篇(一)
- RTSP协议分析(二)