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

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. Mysql 索引优化 - 1

    单表  范围查询 后面的索引会失效 双表  左右连接建立索引互相使用 三表   用小结果集驱动大表结果, 先优化括号里面的SQL, 保证JOIN被驱动的表上ON字段有索引 索引失效(常见原因) 全职匹 ...

  2. 【319】Python 通过 Twilio 发短信

    参考:python利用twilio模块给自己发短信 参考:使用python实现往手机发短信(基于twilio) 步骤如下: 登录 Twilio 网站注册,貌似需要***,包括用户名.密码.手机号.项目 ...

  3. 5月23日Google就宣布了Chrome 36 beta

    对于开发人员来说,本次更新的重点还有element.animate().HTML Imports.Object.observe()的引入,以及一个改进后的throttled async touchmo ...

  4. 使用 Zend_Studio 开发

    之前一直用vim 写PHP, 总觉得IDE的一大堆没有用的插件非常麻烦,所以一直避免使用Zend_Studio.不过随着PHP的发展和框架的发展,以及个人的发展,最后还是回到的IDE的时代. 在使用Z ...

  5. Docker构建redis cluster集群

    准备工作 安装gcc ruby 解压编译redis Redis 是 c 语言开发的.安装 redis 需要 c 语言的编译环境.如果没有 gcc 需要在线安装. yum install gcc-c++ ...

  6. 系统批量运维管理器pexpect详解

    一.pexpect介绍 pexpect可以理解成Linux下的expect的Python封装,通过pexpect我们可以实现对ssh.ftp.passwd.telnet等命令进行自动交互,而无需人工干 ...

  7. Castle ActiveRecord学习(六)数据验证

    参考.来源:http://www.cnblogs.com/Terrylee/archive/2006/04/13/374173.html https://github.com/castleprojec ...

  8. libevent 简单学习

    //NetworkManager.h #ifndef _NET_WORK_MANAGER_ #define _NET_WORK_MANAGER_ #include "event2/util. ...

  9. MicroRNA in Control of Gene Expression: An Overview of Nuclear Functions 微RNA控制基因表达:核功能概述

    MicroRNA in Control of Gene Expression:An Overview of Nuclear Functions微RNA控制基因表达:核功能概述 抽象:小的非编码RNA( ...

  10. windows 如何创建.gitignore 文件 / .ssh 文件夹?解决windows必须键入文件名提示

    windows不允许.gitignore之类的文件,也不允许.ssh命名的文件夹名.会提示必须输入文件名. 要解决这个问题我以前一直是通过bash使用linux命令创建的.最近发现了一个更简便的方法与 ...