传统的测试:

package main

import (
"fmt"
) func addUpper(n int) int {
res :=
for i := ; i <= n; i++ {
res += i
}
return res
} func main() {
res := addUpper()
if res != {
fmt.Printf("错误,真实值:%v,期望值:%v", res, )
} else {
fmt.Printf("正确,真实值:%v,期望值:%v", res, )
} }

存在问题:(1)需要修改main函数,如果程序正在运行,则需要停止程序;(2)需要测试多个函数时,步骤较为繁琐;

单元测试:(1)确保每个函数都是可运行的,并且运行结果都是正确的;(2)确保写出来的代码性能是好的;

利用go中的testing包:测试以TestXxx开头的函数,注意第一个X是大写的。

测试的整体流程图:

具体目录:

main.go

package main

func main() {

}

pro.go

package utils

func addUpper(n int) int {
res :=
for i := ; i <= n; i++ {
res += i
}
return res
} func sub(n1 int, n2 int) int {
return n1 - n2
}

add_test.go

package utils

import (
"fmt"
"testing"
) func TestAddUpper(t *testing.T) {
res := addUpper()
if res != {
//程序错输,则退出,并输出日志
t.Fatalf("AddUpper(10)执行错误,期望值=%v,输出值=%v", , res)
}
//如果正确,输出日志
t.Logf("AddUpper(10)执行正确。。。")
} func TestHello(t *testing.T) {
fmt.Println("hello world")
}

sub_test.go

package utils

import "testing"

func TestSub(t *testing.T) {
res := sub(, )
if res != {
//程序错输,则退出,并输出日志
t.Fatalf("sub(20,10)执行错误,期望值=%v,输出值=%v", , res)
}
//如果正确,输出日志
t.Logf("sub(20,10)执行正确。。。")
}

最后结果:

单元测试注意事项:

(1)测试用例函数必须以TestXxx命令,其中第一个X大写;

(2)测试用例文件必须以_test.go结尾;

(3)TestXxx(t *testing.T)形参类型必须是*testing.T;

(4)一个测试用例文件中可以有多个测试用例;

(5)运行测试用例指令:

  go test (运行正确无日志,错误输出日志)

  go test -v (不管是否正确,都输出日志)

(6)当出现错误时,可以使用t.Fatalf来格式化输出错误信息,并退出程序;

(7)t.logf()可以输出相应的日志;

(8)PASS表示测试用例通过,FAIL表示失败;

(9)测试单个文件:go test -v add_test.go pro.go

(10)测试单个方法:go test -v  -test.run TestAddUpper

(四十)golang--单元测试的更多相关文章

  1. Golang单元测试框架整理

    目录 一.单元测试是什么 二.单元测试的意义 三.Golang单元测试框架 3.1 Golang内置testing包 3.1.1 简单的测试 3.1.2 Benchmark 基准测试 3.1.3 运行 ...

  2. 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s

    总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...

  3. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  4. [书]WALL·E、龙与地下铁、中国美丽的故事、故事新编、四十自述、书虫、人工智能、大话数据结构

    下午有时间,逛了逛了书城,看到了一些书.在这里总结一些自己的感受.   一.<龙与地下铁>     这本书是我首先看到的,就在靠前的新书区.是小说,我没看里面的内容,但是被书封皮的宣传文案 ...

  5. NeHe OpenGL教程 第四十八课:轨迹球

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. NeHe OpenGL教程 第四十五课:顶点缓存

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. NeHe OpenGL教程 第四十六课:全屏反走样

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  9. NeHe OpenGL教程 第四十四课:3D光晕

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  10. NeHe OpenGL教程 第四十二课:多重视口

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

随机推荐

  1. Jetcache

    转存 Jetcache https://github.com/alibaba/jetcache/wiki/GettingStarted_CN

  2. Leetcode Tags(4)Stack & Queue

    一.232. Implement Queue using Stacks private Stack<Integer> stack; /** Initialize your data str ...

  3. jquery获取dom属性方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. fenby C语言 P20

    循环停止 break 立刻跳出不再循环 continue立刻跳出循环从下一次循环继续执行 #include <stdio.h> int main(){ int i; for(i=1;i&l ...

  5. docker-compose下的java应用启动顺序两部曲之二:实战

    上篇回顾 本文是<docker-compose下的java应用启动顺序两部曲>的终篇,在上一篇<docker-compose下的java应用启动顺序两部曲之一:问题分析>中,我 ...

  6. Python 中的反射方法

    一.概述 getattr # 根据字符串为参数,去对象中找与之同名的成员. hasattr # 根据字符串为参数,去判断对象中是否有与之同名的成员. setattr # 根据字符串为参数,动态的设置一 ...

  7. SVN 下载与安装(超简单)!!!

    一   SVN 是什么? 在公司做过团队开发都知道,一个项目的代码要保持最新的版本. 举个例子! 例如:一个公司的项目有5人开发(A,B,C,D,E五个人),有一个地方专门存放项目的最新的代码,这个地 ...

  8. 使用pyquery

    简单举例 from pyquery import PyQuery as pq html = ''' <div> <ul> <li class="item-O&q ...

  9. uWSGI+django+nginx 的工作原理流程与部署历程

    一.前言 献给和我一样懵懂中不断汲取知识,进步的人们. 霓虹闪烁,但人们真正需要的,只是一个可以照亮前路的烛光 二.必要的前提 2.1 准备知识 django 一个基于python的开源web框架,请 ...

  10. 投资自己【用Java写系统】

    猿来如此:http://programmer.ischoolbar.com/