传统的测试:

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. [AHOI2002]哈利·波特与魔法石

    这道题比较简单,就是一个最短路(SSSP).数据水,用Floyd即可AC.这里用了Dijkstra. #include <iostream> #include <cstdio> ...

  2. 关于while和do while 的个人理解

    先上代码 int x=425; System.out.println("循环开始,我的初始值为:x="+x); //425 do { System.out.println(&quo ...

  3. 用FILE*指针对象读文件的方式。

      先直接上代码: ]; ]; char* ptr1; ]; FILE* fh; QString strpath = getenv("GCDIR"); QString str_in ...

  4. WEB安全的历史

    exp  ===  exploit     漏洞利用代码 中国 黑客发展的 几个阶段  启蒙时代  ,黄金时代 ,黑暗时代 启蒙时代  -- 大致在 20世纪 19年代 中国互联网刚起步  一些青年收 ...

  5. 7.22 NOIP模拟7

    又是炸掉的一次考试 T1.方程的解 本次考试最容易骗分的一道题,但是由于T2花的时间太多,我竟然连a+b=c都没判..暴力掉了40分. 首先a+b=c,只有一组解. 然后是a=1,b=1,答案是c-1 ...

  6. csps模拟测试70

    又炸了,T1没开$long long$,炸掉$50pts$,昨天因为SB错误挂掉$100pts$. 我kuku了,以后细心点吧.

  7. 『题解』洛谷P1063 能量项链

    原文地址 Problem Portal Portal1:Luogu Portal2:LibreOJ Portal3:Vijos Description 在\(Mars\)星球上,每个\(Mars\)人 ...

  8. Java 8 Streams API 详解

    流式编程作为Java 8的亮点之一,是继Java 5之后对集合的再一次升级,可以说Java 8几大特性中,Streams API 是作为Java 函数式的主角来设计的,夸张的说,有了Streams A ...

  9. python_day3(文件处理)

    1.文件处理 #Author:Elson Zeng #data = open("test").read() # f = open("test",'a',enco ...

  10. Nginx做缓存服务器

    Nginx做缓存服务器 Nginx配置 1.主配置/etc/nginx/nginx.conf worker_processes 1; events { worker_connections 1024; ...