单元测试在程序开发中具有很重要的作用!

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程序进行单元测试!的更多相关文章

  1. 使用VS2013进行C#程序的单元测试

    没有按照预期的那样做出成功的单元测试,磕磕绊绊参照了下面两篇博客大致做出来了,所以很有必要记录一下过程. http://www.cnblogs.com/duasonir/p/5299732.html( ...

  2. 在ORACLE触发器里调用JAVA程序

    因为项目需要,有一个已经写好的Java程序,想要在Oracle某个表的触发器中调用,以使得每次数据更新时,调用这个JAVA程序,来修改后台某个数据. 现将过程记录如下: 1.编写JAVA程序 publ ...

  3. 安装Kali里的应用程序或软件包

    安装Kali里的应用程序或软件包 安装额外的软件是apt-get命令最基本的功能了,命令非常简单易懂.安装软件包的语法如下: apt-get install 软件包名 比如,安装图像编辑软件gimp, ...

  4. Docker部署启动错误,需要手动进入Docker的容器里,启动程序,排查错误

    #docker-compose build --no-cache //重新创建容器,不管有没有 #docker-compose up #docker-compose up -d //后台启动并运行容器 ...

  5. dubbo应用程序的单元测试环境搭建(springtest,powermock,mockito)

    转:http://blog.csdn.net/yys79/article/details/66472797 最近,项目中频繁用到dubbo,而且java工程用引用了几十个关联系统的服务(如用户认证,基 ...

  6. 关于C#程序的单元测试

    目录 1.单元测试概念 2.单元测试的原则 3.单元测试简单示例 4.单元测试框架特性标签 5.单元测试中的断言Assert 6.单元测试中验证预期的异常 7.单元测试中针对状态的间接测试 8.单元测 ...

  7. 程序最多能new多少内存(2G内存里要放程序的5大区,HeapAlloc比new要快多了,而且超过2G的时候会告诉你)

    根据<Windows核心编程>得知:X86操作系统提供每个程序最多只有4G的虚拟内存,其中2G虚拟内存提供给系统用(具体用来干什么还待考察),还有2G的内存留给用户使用.那这2G内存能拿来 ...

  8. 使用xUnit为.net core程序进行单元测试(上)

    一. 导读 为什么要编写自动化测试程序(Automated Tests)? 可以频繁的进行测试 可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动测试. 肯定比人工测试要快. 可以 ...

  9. 使用xUnit为.net core程序进行单元测试(1)

    导读 为什么要编写自动化测试程序(Automated Tests)? 可以频繁的进行测试 可以在任何时间进行测试,也可以按计划定时进行,例如:可以在半夜进行自动测试. 肯定比人工测试要快. 可以更快速 ...

随机推荐

  1. 单片机(TTL)与电脑RS232接口

    2010年11月28日 21:38 1.先介绍电脑上与单片机进行通讯的接口的名称 (1)一般是用电脑串口来进行通讯的,平常大家说的电脑的串口是指台式电脑主机后面的九针接口,如下图 ‍这个接口有个专业的 ...

  2. Changing the load order/delay the start of the Server service

    THE INFORMATION IN THIS ARTICLE APPLIES TO: Secure FTP Server (All Versions) EFT Server (All Version ...

  3. javascript中所谓的“坑”收录

    坑一: // 反例myname = "global"; // 全局变量function func() { alert(myname); // "undefined&quo ...

  4. linux 同步IO: sync、fsync与fdatasync

    [linux 同步IO: sync.fsync与fdatasync] 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行.当将数据写入文件时,内核通常先将该数据 ...

  5. java反射之ClassLoader

    类加载器ClassLoader ClassLoader能在运行时, 知道任意一个类的的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性. 一.类加载器的工作机制 1:加载Jvm把clas ...

  6. c语言寄存器变量

    寄存器存在于CPU内部,运算速度非常快, 因为内存中的数据必须载入寄存器才能计算.如果直接定义一个变量为寄存器变量,则少了载入等过程自然会快.对于频繁使用的变量可以把它放在寄存器中来提速度. 对于VC ...

  7. Windows pip安装失败:no module named pkg_resources

    通常是Setuptools安装出错,下载以下ez_setup.py文件后,先执行:ez_setup.py -U setuptools 重新安装setuptools 通过此ez_setup.py pip ...

  8. Linux gperf命令

    一.简介 GNU 的 gperf 工具是一种 "完美的" 散列函数,可以为用户提供的一组特定字符串生成散列表.散列函数和查找函数的 C/C++ 代码.通过本文学习如何使用 gper ...

  9. CMD一般命令

    返回根目录:cd\ 回车 进入D盘:输入cd\ 回车,返回根目录,再输入d:回车,即可进入d盘(注意:字符都是英文字符) 进入D盘叫JDK的文件夹:如上面进入d盘后,输入:cd jdk 回车即可 进入 ...

  10. NLTK和Stanford NLP两个工具的安装配置

    这里安装的是两个自然语言处理工具,NLTK和Stanford NLP. 声明:笔者操作系统是Windows10,理论上Windows都可以: 版本号:NLTK 3.2 Stanford NLP 3.6 ...