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下面添加测试用的数据就可以了。

另外测试数据一定要包含正确的数据以及错误的数据,这样的测试才有意义。

Go:表驱动单元测试的更多相关文章

  1. [lua]原来这才是表驱动的正确表达方式

    曾经写了个很煞笔的脚本模拟switch..case语法形式.[lua]尝试一种Case语法糖 而今实际项目应用中突发,原来这才是正确的表驱动方式表达.如下所贴: function event_do( ...

  2. 查询优化--小表驱动大表(In,Exists区别)

    Mysql 系列文章主页 =============== 本文将以真实例子来讲解小表驱动大表(In,Exists区别) 1 准备数据 1.1 创建表.函数.存储过程 参照  这篇(调用函数和存储过程批 ...

  3. Tomcat内核之ASCII解码的表驱动模式

    我们知道Tomcat通信是建立在Socket的基础上,而套接字在服务器端和客户端传递的报文都是未经过编码的字节流,每8位组成1个字节,计算机以二进制为基础,这是由于使用晶体管的开合状态表示1和0,这样 ...

  4. 6.2 小表驱动大表(exists的应用)

    1. 优化原则:小表驱动大表,即小数据集驱动大数据集. select * from A where id in (select id from B) 等价于: for select id from B ...

  5. MySQL高级知识(十六)——小表驱动大表

    前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...

  6. 表驱动方法(Table-Driven Methods)

    表驱动方法(Table-Driven Methods) - winner_0715 - 博客园 https://www.cnblogs.com/winner-0715/p/9382048.html W ...

  7. 了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表

    一.为什么要用小表驱动大表 1.驱动表的定义 当进行多表连接查询时, [驱动表] 的定义为: 1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表] 2)未指定联接条件时,行数少的表为[驱动表 ...

  8. (原创)c++11改进我们的模式之改进表驱动模式

    所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获取值.表驱动是将一些通过较为复杂逻辑语句来得到数据信息的方式,通过查询表的方式来实现,将数据信息存放在表里.对于消除 ...

  9. Table-Driven Design 表驱动设计

    注:本文所有代码来自 http://www.codeproject.com/Articles/42732/Table-driven-Approach 在许多程序中,经常需要处理那些拥有种种色色不同特性 ...

随机推荐

  1. JQUERY获取html标签自定义属性值或data值

    //获取属性值 1 <div id="text" value="黑哒哒的盟友"><div> jQuery取值: $("#tex ...

  2. jq js 的date()使用

    Js获取当前日期时间及其它操作 var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年 ...

  3. thinkphp3.2新部署是错

    下载好thinkphp3.2,使用M或者D方法是,报FILE: tp\ThinkPHP\Library\Think\Db.class.php LINE: 42 可能的错误是,配置文件中没有配置数据库连 ...

  4. 十二 Django框架,自定义分页

    自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring import mark_safe #封装分页类模块 c ...

  5. hibernate复习第(一)天

    首先导入jar. 这个版本是3.2.5 开发流程: 1.由Domain object ->mapping ->db (官方推荐) 2.由DB开始,使用工具生成mapping和Domain ...

  6. (转)gcov、lcov与genhtml 使用心得

    gcc是linux平台下的C.C++ 编译器 gcov是配合gcc产生覆盖信息报告的工具: lcov是将gcov产生的报告信息,以更直观的方式显示出来工具 基本的使用方法分为4个阶段: (一).gcc ...

  7. Havel-Hakimi定理(握手定理)

    Havel-Hakimi定理(握手定理) 由非负整数组成的非增序列s(度序列):d1,d2,…,dn(n>=2,d1>=1)是可图的,当且仅当序列: s1:d2 – 1,d3 – 1,…, ...

  8. stl_iterator.h

    stl_iterator.h // Filename: stl_iterator.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: ...

  9. bzoj 3916: friends 瞎搞

    题目: 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. 题解: 发现字符串的长度一定为奇数. ...

  10. bzoj 4501: 旅行 01分数规划+概率期望dp

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4501 题解: 首先我们不考虑可以删除边的情况下,如何计算期望边数. 然后我们发现这是个有 ...