在Gogland里对GO程序进行单元测试!
单元测试在程序开发中具有很重要的作用!
1,可以保证程序代码的健壮,能够最小范围测试程序代码,从而保证程序的正确性!
2,可以通过单元测试代码快速了解当前的程序。
我在先前的几个软件公司工作时候,都对程序代码进行单元测试,一般来说经过单元测试的程序质量都很好!!现在我使用Gogland来学习GO语言,同时也想用它来开发GO语言程序,那么如何在在Gogland里编写GO程序的单元测试呢?
一,GO语言为我们准备好了测试框架!
单元测试文件的执行需要单元测试框架,GO语言已经为我们准备好了,Go语言中自带有一个轻量级的测试框架testing,可以使用"go test"命令来实现单元测试和性能测试!无须进行任何其它安装或配置,我们就可以编写GO程序的单元测试程序了!!
二,GO语言的单元测试程序应该放到哪里?
我看到很多文章说GO语言的测试程序应该放到一个统一的目录中,但是实际上并不需要那样做。你可以把GO语言的单元测试文件放到任意你想放的地方!!!
一般单元测试文件程序都是随着程序的开发同步编写,一个功能结束后,就应该编写单元测试文件了,而且还有一点,一个单元测试文件中可能会包含多个单元测试方法,我们通常不会全部执行这个单元测试文件中的所有单元测试方法。以我以往的编写单元测试程序的经验来说,通常都是单独执行一个单元测试文件的某个单元测试方法!!在这样的情况下,单元测试文件存放到什么地方都无所谓,只要能够正常执行需要测试的单元测试文件和单元测试方法就可以了!!!
三,在Gogland中编写单元测试程序。
在正式编写单元测试文件之前,我们应该记住这些GO语言单元测试文件的编写规则!!
- 文件名必须是_test.go结尾的,这样在执行go test的时候才会执行到相应的代码
- 你必须import testing这个包
- 所有的测试用例函数必须是Test开头
- 测试用例会按照源代码中写的顺序依次执行
- 测试函数TestXxx()的参数是testing.T,我们可以使用该类型来记录错误或者是测试状态
- 测试格式:func TestXxx (t *testing.T),Xxx部分可以为任意的字母数字的组合,但是首字母不能是小写字母[a-z],例如Testintdiv是错误的函数名。
- 函数中通过调用testing.T的Error, Errorf, FailNow, Fatal, FatalIf方法,说明测试不通过,调用Log方法用来记录测试的信息。
下面是被测试文件和单元测试文件代码:
structFunc.go : 这是要被测试的程序文件,我想对"StructFunc"函数进行单元测试,这个函数是这个程序文件中的一个!
package mydata //自定义的结构,首字母大写可以被导出,包括里面的字段首字母大写才被输出
type TestStruct struct {
Id string
Name string
} //这是一个结构函数,返回两个值,输入为方法接收者
func (ts *TestStruct) StructFunc (idIn,nameIn string) (idOut,nameOut string){ ts.Id=idIn;
ts.Name=nameIn; return ts.Id,ts.Name
} //这是另外一个结构函数,返回结构,输入为方法接收者
func (ts *TestStruct) StructFunc2 (idIn,nameIn string) TestStruct{ ts.Id=idIn;
ts.Name=nameIn; return *ts
} //这是普通函数,函数名前面没有方法接收者
func OrdinaryFunc (input1,input2 string) (outPut string){ temp:=input1+input2 return temp
}
structFunc_test.go : 这是上面的单元测试程序,仅仅测试"StructFunc"函数。
package mydata import (
"testing"
) //StructFunc的测试方法
func TestStructFunc(t *testing.T) { //声明结构函数输入的变量
var (
idIn string
nameIn string
) //给结构函数输入的变量赋值
idIn = "inputId"
nameIn = "inputName" //得到结构
ts := &TestStruct{} //调用结构函数1
idOut, nameOut := ts.StructFunc(idIn, nameIn) if idOut==idIn&&nameOut==nameIn{
t.Log("测试通过!")
}else{
t.Error("函数执行错误")
} }
四,在Gogland中随意执行任意单元测试方法。
在任意一个单元测试文件中的任意一个单元测试方法,都应该可以被单独执行,在Gogland确实可以这样做!!!
1,打开要执行测试的单元测试程序,随后有鼠标左键选中要执行测试的测试方法。

2,在选中的单元测试方法上面鼠标右键,随后在弹出菜单中执行对应命令。

3,这是执行单元测试方法后的截图,表明当前被测试方法完全正确,通过对它的单元测试了!
4,对其它单元测试方法,同样用鼠标右键,在弹出菜单中执行对应命令就可以了。下面是我对新增的一个单元测试方法进行的单元测试截图。

5,我们可以把单元文件存放到任意位置执行,我把上面的单元测试文件拷贝到"mydata"包中进行单元测试,一样顺利进行了单元测试,下面是截图:

一点建议:虽然我们可以把单元测试程序放到任意地方,不过为了维护方便,我还是建议存放到一个固定位置,我把我所有的单元测试程序都存放到”test“包中了!
参考:
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/11.3.md
http://blog.csdn.net/samxx8/article/details/46894587
在Gogland里对GO程序进行单元测试!的更多相关文章
- 使用VS2013进行C#程序的单元测试
没有按照预期的那样做出成功的单元测试,磕磕绊绊参照了下面两篇博客大致做出来了,所以很有必要记录一下过程. http://www.cnblogs.com/duasonir/p/5299732.html( ...
- 在ORACLE触发器里调用JAVA程序
因为项目需要,有一个已经写好的Java程序,想要在Oracle某个表的触发器中调用,以使得每次数据更新时,调用这个JAVA程序,来修改后台某个数据. 现将过程记录如下: 1.编写JAVA程序 publ ...
- 安装Kali里的应用程序或软件包
安装Kali里的应用程序或软件包 安装额外的软件是apt-get命令最基本的功能了,命令非常简单易懂.安装软件包的语法如下: apt-get install 软件包名 比如,安装图像编辑软件gimp, ...
- Docker部署启动错误,需要手动进入Docker的容器里,启动程序,排查错误
#docker-compose build --no-cache //重新创建容器,不管有没有 #docker-compose up #docker-compose up -d //后台启动并运行容器 ...
- dubbo应用程序的单元测试环境搭建(springtest,powermock,mockito)
转:http://blog.csdn.net/yys79/article/details/66472797 最近,项目中频繁用到dubbo,而且java工程用引用了几十个关联系统的服务(如用户认证,基 ...
- 关于C#程序的单元测试
目录 1.单元测试概念 2.单元测试的原则 3.单元测试简单示例 4.单元测试框架特性标签 5.单元测试中的断言Assert 6.单元测试中验证预期的异常 7.单元测试中针对状态的间接测试 8.单元测 ...
- 程序最多能new多少内存(2G内存里要放程序的5大区,HeapAlloc比new要快多了,而且超过2G的时候会告诉你)
根据<Windows核心编程>得知:X86操作系统提供每个程序最多只有4G的虚拟内存,其中2G虚拟内存提供给系统用(具体用来干什么还待考察),还有2G的内存留给用户使用.那这2G内存能拿来 ...
- 使用xUnit为.net core程序进行单元测试(上)
一. 导读 为什么要编写自动化测试程序(Automated Tests)? 可以频繁的进行测试 可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动测试. 肯定比人工测试要快. 可以 ...
- 使用xUnit为.net core程序进行单元测试(1)
导读 为什么要编写自动化测试程序(Automated Tests)? 可以频繁的进行测试 可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动测试. 肯定比人工测试要快. 可以更快速 ...
随机推荐
- Git 仓库 SSH、HTTP、Gitweb (Nginx) 乱炖
简介: 自己搭建 Git 仓库,实现 SSH 协议.配合 Nginx 实现 HTTP 协议拉取.推送代码. 利用 Nginx 实现 Gitweb 在线浏览代码,使用 Gitweb-theme 更新默认 ...
- 【328】Python 控制鼠标/键盘+图片识别 综合应用
本文是基于 [267]实现跨网络传数据 的基础上的,由于在弹出 putty 之后,需要手动输入命令(pass.sh.get.sh)来实现数据的传递,另外就是处理完之后需要手动关闭 putty,本文解决 ...
- 迷你MVVM框架 avalonjs 0.98发布
在本版本中,avalon侧重于对组件开发的支持,可用控件达到12个,末来将大力投入对GRID,TREE等重型UI的开发中. 添加ms-widget绑定,废弃ms-ui绑定 为ms-include添加跨 ...
- 前端开发之jQuery位置属性和筛选方法
主要内容: 1.jQuery的位置属性及实例 (1)位置属性 (2)实例 --- 仿淘宝导航栏 2.jQuery的筛选方法及实例 (1)筛选方法 (2)实例一:嵌套选项卡 (3)实例二:小米官网滑动 ...
- 在 springboot 中如何整合 shiro 应用 ?
Shiro是Apache下的一个开源项目,我们称之为Apache Shiro. 它是一个很易用与Java项目的的安全框架,提供了认证.授权.加密.会话管理,与spring Security 一样都是 ...
- mysql5.7 初始化启动
root@0f6852dfee81:/# mysql --versionmysql Ver 14.14 Distrib 5.7.18-16, for debian-linux-gnu (x86_64 ...
- fabric本地一键部署LAMP
一.添加普通用户jeff执行sudo时无需输入密码 $ sudo vim /etc/sudoers ---------------------------------------> ## All ...
- springmvc web.xml配置之 -- SpringMVC IOC容器初始化
SpringMVC IOC容器初始化 首先强调一下SpringMVC IOC容器初始化有些特别,在SpringMVC中除了生成一个全局的spring Ioc容器外,还会为DispatcherServl ...
- ubuntu14.04环境下利用docker搭建solrCloud集群
在Ubuntu14.04操作系统的宿主机中,安装docker17.06.3,将宿主机的操作系统制作成docker基础镜像,之后使用自制的基础镜像在docker中启动3个容器,分配固定IP,再在3个容器 ...
- 7-n!的位数(斯特灵公式)
http://acm.hdu.edu.cn/showproblem.php?pid=1018 Big NumberTime Limit: 2000/1000 MS (Java/Others) Memo ...