Go项目的测试代码1(基础)
最近写了测试代码,整理了一下。
先看看简单的测试代码.
// add_test.go ==> 文件名 _test.go 结尾的默认为测试代码文件
package models import (
"testing"
) //Test开头的默认为测试方法
func TestAdd(t *testing.T) {
//arrange
var x, y, res int
x =
y = //act
result = Add(x, y) //assert
if result != {
t.Fatal("Add的结果不正确")
}
}
// add.go
package models func Add(x, y int) int {
return x + y
}
查看测试结构。
$ go test -v ==> 依次运行当前package的 _test.go文件的测试方法。
=== RUN TestAdd
--- PASS: TestAdd (.00s)
PASS
ok gotest/test5 .006s
目前编写测试代码普遍公认的模板结构。
1)arrange: 测试之前需要准备的代码。
2)act: 实际要测试的方法。
3)assert: 结果确认。
如果测试不通过呢?
//assert
if result != { //==>结果改成 6
t.Fatal("Add的结果不正确")
}
$ go test
--- FAIL: TestAdd (.00s)
add_test.go:: Add的结果不正确
FAIL
exit status
FAIL gotest/test5/models .006s
也可以写一个公用的比较方法, 自定义输出结果。
package test import (
"reflect"
"testing"
) func Equal(t *testing.T, exp, got interface{}) {
if !reflect.DeepEqual(exp, got) {
t.Errorf("\033[31m\n exp: %v \n got: %v \033[39m\n", exp, got)
t.FailNow()
}
}
//assert
if result != { //==>结果改成 6
t.Fatal("Add的结果不正确")
} //=====>> 比较的方法改用自己写的test包的Equal方法。 //assert
test.Equal(t, result, )
输出测试未通过的代码位置,以及比较结果。
$ go test
--- FAIL: TestAdd (.00s)
test.go::
exp: 5
got: 6
FAIL
exit status
FAIL gotest/test5/models .007s
这样可以按照自己的喜好来自定义提示了。
覆盖率
go test -cover
go test -cover go test -cover -coverprofile=coverage.out
go tool cover -html=./coverage.out
可以查看测试代码的覆盖率,这只是一个补助的功能。
不需要过分的要求高覆盖率,因为维护测试代码也是耗精力的。
下篇文章介绍项目中我是怎么写测试代码的…^^
未完继续
Go项目的测试代码1(基础)的更多相关文章
- Go项目的测试代码2(项目运用)
上一篇文章介绍了最基本的测试代码的写法.Go项目的测试代码(基础) 这里简单的共享一下我在项目中使用的方式. 项目结构 我们实际项目中, 结构简单地分了控制层controllers和模块层models ...
- Go项目的测试代码3(测试替身Test Double)
上一篇文章介绍了项目中测试代码的写法. Go项目的测试代码2(项目运用) 这里简单的共享一下测试替身. 当我们写测试代码的时候,经常遇到一个问题.跟别的模块或服务有依赖性,可是功能还没开发完.或是因为 ...
- Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码
Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...
- .NET单元测试的艺术-3.测试代码
开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录 ...
- Web项目后台测试流程
1. 本地下载项目源码 1. Git clone项目代码到本地(本地项目代码1)并fetch: 2. Switch到master分支: 3. Create测试分支(例如:test1)并勾选“Switc ...
- spring boot项目如何测试,如何部署
有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发.调试.打包到最后的投产上线. 开发阶段 单元 ...
- 统计 Django 项目的测试覆盖率
作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 我们完成了对 blog 应用和 comment 应用这两个核心 app 的测试.现在 ...
- JUnit5学习之六:参数化测试(Parameterized Tests)基础
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 使用Express连接mysql详细教程(附项目的完整代码我放在结尾了)
使用Express连接mysql详细教程(附项目的完整代码我放在结尾了) 要使用Express连接本地数据库 我们首先需要安装好Express的依赖 我们使用这个框架呢首先要有一点ajax的基础 如果 ...
随机推荐
- 解决织梦5.7添加新变量出现:Request var not allow!的办法
找到:根目录->include->common.inc.phpif( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_ ...
- SIFT算法相关资料
SIFT算法相关资料 一.SIFT算法的教程.源码及应用软件1.ubc:DAVID LOWE---SIFT算法的创始人,两篇巨经典经典的文章http://www.cs.ubc.ca/~lowe/ 2. ...
- MySQL跨表更新SQL
1 sql范式 把s表中的city_name的值设置为city表中的name,关联条件是city_code 和 code update student s, city c set s.city_na ...
- late_initcall 替换 module_init
今天在调试pwm驱动程序的时候,在__init函数中调用pwm_init后,则以太网不可用.pwm_init放在设备文件的open函数中,则系统正常运行. 这当中的区别就是硬件初始化函数pwm_ini ...
- web开发:javascript基础
一.js引入 二.变量的定义 三.三种弹出框 四.调试方式 五.数据类型 六.数据类型转换 七.运算符 八.分支机构 九.循环结构 十.异常处理 十一.函数 一.js引入 - ES: ECMAScri ...
- 使用python2与python3创建一个简单的http服务(基于SimpleHTTPServer)
python2与python3基于SimpleHTTPServer创建一个http服务的方法是不同的: 一.在linux服务器上面检查一下自己的python版本:如: [root@zabbix ~]# ...
- windows配置mysql权限
想要把csv里面的数据导入mysql,报错.用命令 show variables like '%secure%'; : [2019-04-08 17:04:36] [HY000][129 ...
- html z-index
如果你的悬浮的div被其他遮挡 那应该是遮挡的元素与它不是同级 可以考虑放在同一个父级目录下
- C# 集合(9) 持续更新
数组的大小是固定的.如果元素个数动态,就使用集合类. List<T>是与数组相当的集合类.其他的集合:队列.栈.链表.字典和集. .NET Framework 1.0 包括非泛型集合类,如 ...
- Java8-Stream-No.06
import java.io.IOException; import java.math.BigDecimal; import java.util.Arrays; import java.util.s ...