Go语言学习19-样本测试

2023-10-31

引言

上一篇笔者介绍了 Go 语言的 基准测试,其实在测试源码文件中还可以添加样本测试函数,但编写样本测试函数不需要使用 testing 代码包的 API

下面我们来介绍一下 Go 语言的样本测试:

样本测试

1. 编写样本测试函数

样本测试函数的名称需要以 Example 作为开始。在这类函数的函数体的最后还可以有若干个注释行。它们作用是比较在该测试函数被执行期间,标准输出上出现的内容是否与预期的相符。但要想这些注释航被正确地解析,需满足下面几个条件:

  • 这些注释行必须出现在函数体的末尾,且在它们和作为当前函数体结束符的“}”之间没有任何代码。否则,注释行对于样本测试来说是无效的。

  • 在第一行注释中,紧跟在单行注释前导符//之后的永远应该是Output:,否则这些注释行对于样本测试来说是无效的。

  • Output: 右边的内容以及后续注释行中的内容都分别代表了标准输出中的一行内容。

如下一个测试源码文件 et_test.go,位于工作区 src 下的 testing/et 代码包中:

package et

import (
	"fmt"
)

func ExampleHello() {
	fmt.Println("Hello, Huazie")
	// Output: Hello, Huazie
}

2. 样本测试的运行

使用 go test 命令对上面的源码文件 et_test.go 进行测试,运行截图如下:

这里写图片描述

调用 fmt.Println 函数所产生的打印内容并不会真正地出现在标准输出上,而只会被用于与样本注释行中的内容做对比。现在修改 fmt.Println 中内容为 Hello, Huazie1,运行结果截图如下:

这里写图片描述

现在将样本测试函数 ExampleHello 修改成这样:

func ExampleHello() {
	for i := 0; i < 3; i++ {
		fmt.Println("Hello, Huazie")
	}

	// Output: Hello, Huazie
	// Hello, Huazie
	// Hello, Huazie
}

运行截图如下:

这里写图片描述

测试仍然通过,不过需要注意,在样本测试函数的函数体末尾的多个样本注释行必须是连续的,在它们之间不能间隔任何行,即使是空行也不行。命令程序只会把在样本测试函数的函数体中的紧挨着当前函数体结束符 } 的注释行视为样本注释行。如果一个样本测试函数中没有任何样本注释行,那么这个函数仅仅会被编译而不会执行。

3. 样本测试函数的命名

样本测试函数命名规则:

  • 当被测试对象是整个代码包时,样本测试函数的名称应该是Example,即直接以样本测试函数名的统一前缀作为函数名称。

  • 当被测试对象是一个函数时,对于函数F,样本测试函数的名称应该是 ExampleF

  • 当被测试对象是一个类型时,对于类型T,样本测试函数的名称应该是 ExampleT

  • 当被测试对象是某个类型中的一个方法时,对于类型T的方法M,样本测试函数的名称应该是 ExampleT_M

如果需要在样本测试函数的名称上添加后缀,那么需要用下划线把该后缀与名称的其他部分分隔开。并且,该后缀的首字母必须小写。例如:针对类型 T 的方法 M 且需要加入后缀 basic 的样本测试函数的名称应该是 ExampleT_M_basic

结语

本篇我们讲解了Go语言的样本测试,下一篇我们了解Go语言的测试运行记录和覆盖率的内容,敬请期待!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go语言学习19-样本测试 的相关文章

  • Go语言学习16-特殊流程控制

    特殊流程控制 引言 特殊流程控制 1 defer语句 2 异常处理 2 1 error 2 2 panic 2 3 recover 结语 引言 上一篇博文介绍了 Go 语言的基本流程控制 本篇我们介绍 Go 语言的特殊流程控制 特殊流程控制
  • Go编程技巧--io.Reader/Writer

    Go原生的pkg中有一些核心的interface 其中io Reader Writer是比较常用的接口 很多原生的结构都围绕这个系列的接口展开 在实际的开发过程中 你会发现通过这个接口可以在多种不同的io类型之间进行过渡和转化 本文结合实际
  • go语言各种hash哈希算法使用汇总(超详细代码)

    目录 前言 一 首先以md4为例 一 16进制字符串的md4 二 字符串的md4 三 16进制字符串 字符串封装 二 md4 md5 sha1 ripemd160 sha256 sha512 一 导包 二 单个使用 三 md4 md5 sh
  • 使用 Go API 快速下载 excel 文件

    我们有几个 Golang API 可以为 csvfiles 提供服务 但在提供以编程方式生成的 excel 文件方面没有任何帮助 为了避免重新编写 我们可以借助此服务器开始 main go 这使我们能够服务于路由 和 excel downl
  • Go语言学习17-功能测试

    功能测试 引言 功能测试 1 编写功能测试函数 2 常规记录 3 错误记录 4 致命错误记录 5 失败标记 6 立即失败标记 7 失败判断 8 忽略测试 9 并行运行 10 功能测试的运行 11 关于测试运行的时间 12 测试的并发执行 结
  • Go语言-log

    1 log包 作为程序调试手段和运行记录 log是非常重要的 现在多数情况下并不是通过某个调试器来进行debug了 而是通过打log的方式观察和调试程序 可以根据自己的需要实现log功能 Go语言本身也已经内置了log包 这里研究Go语言内
  • go语言使用thrift协议实现客户端和服务端报not enough arguments in call to oprot.WriteMessageBegin错误解决方案

    正常步骤 安装golang的Thrift包 go get git apache org thrift git lib go thrift 安装 Thrift 的 IDL 编译工具 http www apache org dyn closer
  • golang的hijack篡取劫持

    一直不太明白golang的hijack是干什么的 只知道hijack这个词是篡取的意思 难道跟网关的作用一样 把client的请求发到这个服务上 然后这个服务帮忙转发到远端server 但是看了源码后就明白这个golang hijack是干
  • Gin的使用

    Gin框架 gin框架路由使用前缀树 路由注册的过程是构造前缀树的过程 路由匹配的过程就是查找前缀树的过程 gin框架的中间件函数和处理函数是以切片形式的调用链条存在的 我们可以顺序调用也可以借助c Next 方法实现嵌套调用 借助c Se
  • Go Web编程实战(2)----流程控制语句

    目录 流程控制语句 if else语句 for循环语句 用for循环实现do while 用for循环实现while break指定跳出循环 continue语句 for range循环 遍历数组 遍历字符串 遍历map 遍历通道 chan
  • Go语言的跨文件调包

    一 前言 文件的结构如下 go mod main main go util util go 文件在调用其它包的时候 需要在代码中引用其他的函数 包的命名一般都以小写为主 文件中函数的以首字符为大写的函数为共有函数 小写的为私有函数 只能是在
  • Golang Http Server源码阅读

    这篇文章出现的理由是业务上需要创建一个Web Server 创建web是所有语言出现必须实现的功能之一了 在nginx fastcgi php广为使用的今天 这里我们不妨使用Go来进行web服务器的搭建 前言 使用Go搭建Web服务器的包有
  • Go基础(复杂类型):结构体

    结构体 一个结构体 struct 就是一个字段的集合 而 type 的含义跟其字面意思相符 下面来写一个简单的例子 package main import fmt 一个结构体就是一个字段的集合 type Vertex struct X in
  • 使用Go Hijack和jQuery轻松实现异步推送服务

    使用Go Hijack和jQuery轻松实现异步推送服务 首先要说明的是 这里实现的异步推送服务采用的是Long Polling方式 并不是Comet 如果想用Comet来实现的话 可以参考这个开源项目 http cometd org 不过
  • Go语言简介

    一 Go编程语言概述 Go语言也叫Golang 是由谷歌 Google 公司在2007年推出的一款静态编译型语言 主要将其用于服务端开发 并发编程和网络编 程等 1 1 Go语言特性及应用场景 1 容易上手 2 编程速度快 3 原生支持并发
  • Go开发工具

    http studygolang com articles 1678 1 4 Go开发工具 本节我将介绍几个开发工具 它们都具有自动化提示 自动化fmt功能 因为它们都是跨平台的 所以安装步骤之类的都是通用的 LiteIDE LiteIDE
  • Go设置国内源

    Go设置国内源 如果你需要Beego这个框架 正常来说你需要安装Git之后go get不会报错 但由于网络问题 go get会非常慢 以至于没法使用 这个时候我们需要需要国内源来进行加速 首先需要我们开启Go的MODULL支持 SETX G
  • Go语言学习18-基准测试

    基准测试 引言 基准测试 1 编写基准测试函数 2 计时器 3 内存分配统计 4 基准测试的运行 结语 引言 所谓基准测试 Benchmark Test 简称BMT 是指 通过一些科学的手段实现对一类测试对象的某项性能指标进行可测量 可重复
  • Golang并发安全和锁

    目录 场景 互斥锁 读写互斥锁 互斥锁 读写锁 Sync Once sync Map 定时器 场景 有时候在Go代码中可能会存在多个goroutine同时操作一个资源 临界区 这种情况会发生竞态问题 数据竞态 类比现实生活中的例子有十字路口
  • Go语言学习路线

    gogogo git 地址 Go 学习 学习路线 2 基础知识 3 开发工具安装地址 下载 Go基础知识 链接为gitee地址 放心查看 基础结构 learn1 go 基础语法 learn2 go 数据类型 learn3 go 变量 lea

随机推荐

  • Android 应用内部存储之应用文件缓存

    前言 Android 应用内部存储之应用文件缓存的重点在最后总结 如果想快速学习 直接查看最后总结 在向手机上保存数据 一般是把数据保存在sdcard中的 大部分应用是直接在sdcard的根目录下创建一个文件夹 然后把数据保存在该文件夹中
  • 一个TCP长连接设备管理后台工程(四)---jtt808协议解析

    协议解析 从前面内容我们可以发现 808协议是一个很典型的协议格式 固定字段 变长字段 其中固定字段用来检测一个帧格式的完整性和有效性 所以一般会包含一下内容 帧头 变长字段对应的长度 校验 由于这一段的数据格式固定 目的单一 所以处理起来
  • vue/react/node项目通过eslint检查语法规范

    首先 我们打开终端 全局安装依赖 npm install g eslint 然后 以管理员身份运行项目终端 输入 eslint init 然后 这里 在初始化时会问我们想如何使用它 分别对应 仅检查语法 检查语法并发现问题 检查语法 发现问
  • 面试官:为啥索引可以让查询变快?

    您好 我是路人 更多优质文章见个人博客 http itsoku com 概述 人类存储信息的发展历程大致经历如下 由于是个人凭着自己理解总结的 因此可能不一定精确 但是毋庸置疑的是 在当代 各大公司机构部门的数据都是维护在数据库当中的 数据
  • 如何在Kubernetes中安装metrics-server以获取Node节点、Pod容器资源监控指标?

    关注 WeiyiGeek 公众号 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 本章目录 Kubernetes中安装metrics server以获取客户端资源监控指标 原文地址 https blog weiyige
  • 系统分析师笔记

    信息系统生命周期 1 立项阶段 企业全局 形成概念 需求分析 2 开发阶段 系统规划 系统分析 系统设计 系统实施 系统验收 3 运维阶段 通过验收和移交之后 4 消亡阶段 更新改造 功能扩展 报废重建 1 系统规划 初步调查 分析系统目标
  • bash设置成vim命令模式

    如果你习惯在vim下编辑文件或者写代码 那么对Vim命令肯定很熟悉 自然希望在bash输入命令的时候也能够使用这些命令 使得shell命令输入也便利起来 默认情况下 bash是Emacs模式的 在 bashrc里面添加一个设置 set o
  • python的name属性_Python中__name__属性的妙用

    在Python中 每一个module文件都有一个built in属性 name 这个 name 有如下特点 1 如果这个module文件是被别的文件导入的 那么 该 name 属性的值就是这个module文件的名字 2 如果这个module
  • elastic-job开源框架使用中遇到的 架包冲突错误

    最近在运行部门一个新的框架 该框架是用maven管理jar包的聚合工程 在进行运行elastic job相关的一个子项目时 报了如下的错误 Exception in thread main org springframework beans
  • 使用Django开发一个简易的留言板

    Django在线留言板demo 环境 ubuntu16 04 python3 django1 11 1 创建项目 django admin py startproject message 进入项目message 2 创建APP python
  • 伪代码和流程图

    一 逻辑是写代码的基础 逻辑是什么 三段论 命题一 JS中所有函数都是由function构造的 命题二 Function Object Array 推论 Function Object Array是由Function构造的 二 用三种语句表
  • Keras LSTM层return_sequences参数的坑

    具体用法我就不赘述了 可以参考中文文档https keras io zh layers recurrent lstm 我主要记录一下坑 网络结构如下 model Sequential model add Embedding 257 150
  • Windows安装PyTorch并配置pycharm

    Windows安装PyTorch并配置pycharm 安装PyTorch 1 下载Anaconda并安装 https www anaconda com 2 打开Anacnda Prompt创建分区并安装pytorch 创建分区并激活 con
  • 【转】c# WebApi之解决跨域问题:Cors

    c WebApi之解决跨域问题 Cors 版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net lwpoor123 article deta
  • ensp的下载与安装

    ensp的下载与安装 1 安装环境 Win 10系统安装 也可虚拟机安装 2 安装 下载链接 现在官网不让下载了 我这里有2个版本的ensp windows7和windows10的 是免费的 ensp免费下载 阿杰邦尼的博客 CSDN博客
  • 收藏清单--排序

    LeetCode 收藏清单 给你一个数组 favoriteCompanies 其中 favoriteCompanies i 是第 i 名用户收藏的公司清单 下标从 0 开始 请找出不是其他任何人收藏的公司清单的子集的收藏清单 并返回该清单下
  • DBSCAN算法的代码实现

    1 读取数据 import pandas as pd data pd read excel 演示数据 xlsx data head 2 数据可视化 import matplotlib pyplot as plt plt scatter da
  • Java 4-5、Mybatis插件快速生成代码

    Mybatis插件快速生成代码 一 pox xml依赖插件
  • MySql常见问题(长期更新 2023.08.23)

    基于mysql 8 0 3版本 2023 08 23 更新 一 忘记root密码 1 1 linux 系统下忘记密码 1 2 Windows 系统下忘记密码 1 3 Unix 和类 Unix 系统 二 账号问题 2 1 远程访问账号设置 三
  • Go语言学习19-样本测试

    样本测试 引言 样本测试 1 编写样本测试函数 2 样本测试的运行 3 样本测试函数的命名 结语 引言 上一篇笔者介绍了 Go 语言的 基准测试 其实在测试源码文件中还可以添加样本测试函数 但编写样本测试函数不需要使用 testing 代码