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. IE6、IE7、IE8及其他浏览器多个元素并排显示

    IE6.IE7.IE8及其他浏览器多个元素并排显示 HTML代码 <div class="line"> <h1>全部input框</h1> &l ...

  2. jquery 实现智能炫酷的翻页相册效果

    jquery 实现智能炫酷的翻页相册效果巧妙的运用 Html 的文档属性,大大减少jquery 的代码量,实现了智能炫酷的翻页相册.兼容性很好,实现了代码与标签的完全分离​1. [代码]jquery ...

  3. MyEclipse消除frame引起的the file xxx cannot be found

    因为该页面所指向的页面路径不对,便进行手动修改,修改时却出现了很烦的问题,输入一个字就弹出一个提示框“the file XXX can not be found.Please check the lo ...

  4. SSH三大框架的搭建整合(struts2+spring+hibernate)(转)

    原文地址:http://blog.csdn.net/kyle0349/article/details/51751913  尊重原创,请访问原文地址 SSH说的上是javaweb经典框架,不能说100% ...

  5. hdu-5651 xiaoxin juju needs help(数学+gcd约分求阶乘)

    题目链接: xiaoxin juju needs help Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K ...

  6. linux命令学习笔记(17):whereis 命令

    whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和 源代码文件(参数-s).如果省略参数,则返回所有信息. 和find相比,whereis查找的速度 ...

  7. Statement

    题目大意 给定一棵基环外向树,和若干组询问,对于每次独立的询问都指定一些起点和一些终点,你删去一些边,使得从任意起点出发都无法到达终点,并让删去的边的编号的最小值最大,求这个最大的最小值. 题解 不难 ...

  8. properties使用

    properties可以load store 注释可以采用 "#" 或者"!" 分隔采用"="或者":" 分行采用&qu ...

  9. [转]CSS3盒模型display:box详解

    时间:2014-02-25来源:网络作者:未知编辑:RGB display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布 ...

  10. Windows Touch 便笺簿的

    Windows Touch 便笺簿的 C# 示例 (MTScratchpadWMTouchCS)   本节介绍 Windows Touch 便笺簿的 C# 示例. Windows Touch 便笺簿的 ...