(四十)golang--单元测试
传统的测试:
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--单元测试的更多相关文章
- Golang单元测试框架整理
目录 一.单元测试是什么 二.单元测试的意义 三.Golang单元测试框架 3.1 Golang内置testing包 3.1.1 简单的测试 3.1.2 Benchmark 基准测试 3.1.3 运行 ...
- 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s
总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...
- Deep learning:四十六(DropConnect简单理解)
和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...
- [书]WALL·E、龙与地下铁、中国美丽的故事、故事新编、四十自述、书虫、人工智能、大话数据结构
下午有时间,逛了逛了书城,看到了一些书.在这里总结一些自己的感受. 一.<龙与地下铁> 这本书是我首先看到的,就在靠前的新书区.是小说,我没看里面的内容,但是被书封皮的宣传文案 ...
- NeHe OpenGL教程 第四十八课:轨迹球
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十五课:顶点缓存
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十六课:全屏反走样
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课
centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobacku ...
- NeHe OpenGL教程 第四十四课:3D光晕
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十二课:多重视口
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
随机推荐
- 百万年薪python之路 -- 函数的动态参数练习
1.继续整理函数相关知识点. 2.写函数,接收n个数字,求这些参数数字的和.(动态传参) def func(*args,**kwargs): num_sum = 0 num_dic = [] num ...
- 线性回归 python 代码实现
本代码参考自:https://github.com/lawlite19/MachineLearning_Python#%E4%B8%80%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%B ...
- Vue 的准备
## .es6的基本语法 let---是局部作用于,不会存在变量提升,变量不能重复声明 const--局部作用域,不会存在变量提升 不能重复声明,只声明常亮,不可变的量 ```javasc ...
- web常用知识
Html 1.打电话,发短信和发邮件 <a href="tel:0755-10086">打电话给:0755-10086</a> <a href=&qu ...
- 委托事件(jQuery)
<div class="content"> <ul> <li>1</li> <li>2</li> <l ...
- video2
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- http和Https简介、详解
目录 引用 一.HTTP和HTTPS的基本概念 二.HTTP与HTTPS有什么区别? 三.HTTPS的工作原理 四.HTTPS的优点 五.HTTPS的缺点 六.http切换到HTTPS 引用 超文本传 ...
- VS运行遇到的那些坑
今天运行VS项目好好的,就是安装了VS2019后,就出现了无法连接到IIS服务器,这个问题,然后各种办法都试了无效. 解决方法: 1.删除根目录的.vs文件,然后重新生成. 2.修改调试这里的IP改为 ...
- 漏洞靶场--webug4.0安装
官网:https://www.webug.org/ 官方版本里安装视频教程 7.19官网打不开,分享当初存在网盘的[7.1更新] 链接: https://pan.baidu.com/s/1F3658i ...
- CSPS模拟 47
考试时T1没玩明白,用一个WA90把100盖住了? T1 Emotional Flutter 题目非常蠢萌,只是注意当你把黑块前伸s距离后,应把脚的长度视为0,而不应为1. T2 Endless Fa ...