非零基础自学Golang 第15章 Go命令行工具 15.5 代码测试(test) 15.5.1 单元测试

news2024/11/15 23:41:07

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第15章 Go命令行工具
        • 15.5 代码测试(test)
          • 15.5.1 单元测试

第15章 Go命令行工具

15.5 代码测试(test)

go test命令用于对Go语言编写的代码包进行测试。

可以指定要测试的文件,也可以直接对整个包进行测试,但需要包中含有测试文件,测试文件都是以“_test.go”结尾。

代码测试的目的是确保代码按照你的设想执行,编写测试代码可以尽早地发现程序所存在的问题。

15.5.1 单元测试

在Go语言中可以使用测试框架test编写单元测试,使用命令行即可对代码进行测试及输出测试报告。

单元测试的目的是发现产品代码是否存在功能性问题,代码是否存在缺陷、是否按预期运行,因此,一个测试函数的结果要么是通过(PASS),要么是失败(FAIL)。

和其他语言相比,Go语言的测试是非常高效的,开发者不用花费太多的时间就能写出较为全面的测试代码。

要编写测试代码就需要导入测试框架testing。单元测试的函数名使用“Test”为前缀,后面为要测试的函数名,并且需要传入*testing.T类型的参数。

例如要编写函数Add的测试代码,需要使用如下方式:

func TestAdd(t *testing.T) {
 	// 测试代码
}

[ 动手写15.5.1]

package main

const PI float64 = 3.14

// 两数相加
func Add(a, b int) int {

   return a + b
}

// 求圆的面积
func Area(r float64) float64 {
   return PI * r * r
}

在这里插入图片描述

动手写15.5.1定义了两个函数Add和Area,我们现在来尝试编写关于这两个函数的单元测试代码。

例如对Add函数的测试代码如下,其中t.Error表示在测试不通过时,打印输出错误信息。

func TestAdd(t *testing.T) {
   if Add(1, 3) != 4 {
      t.Error("Add 函数存在问题")
   }
}
package main

import "testing"

const PI float64 = 3.14

// 两数相加
func Add(a, b int) int {

   return a + b
}

// 求圆的面积
func Area(r float64) float64 {
   return PI * r * r
}

func TestAdd(t *testing.T) {
   if Add(1, 3) != 4 {
      t.Error("Add 函数存在问题")
   }
}

在这里插入图片描述

如果测试通过

在这里插入图片描述

如果测试不通过,就会打印如下信息

在这里插入图片描述

TestAdd测试函数使用了一个测试数据,然而我们在测试函数时,往往需要测试更多不同维度的数据,如果每组数据都是使用以上方式,代码就会显得冗余且不美观,这时我们可以使用如下方式,给多组数据进行测试。

func TestAdd(t *testing.T) {

	inputs := [][]int{{1, 2}, {2, 3}, {4, 7}}
	expected := []int{3, 5, 11}

	for i := 0; i < len(inputs); i++ {

		ret := Add(inputs[i][0], inputs[i][1])
		if ret != expected[i] {
			t.Errorf("input is %d , the expected is %d , the actual %d", inputs[i], expected[i], ret)
		}
	}
}

妙啊

inputs为函数的参数数组,expected为使用该函数期望得到的返回值,以上代码测试了三组数据。

当然,如果想要测试更多数据,直接在inputs和expected添加就可以了,运行结果:

在这里插入图片描述

当然这是全对 的情况,搞错一个

在这里插入图片描述

没毛病

同理 测试计算面积那个函数

func TestArea(t *testing.T) {

   inputs := []float64{1, 2, 4}
   expected := []float64{3.14, 12.56, 50.24}

   for i := 0; i < len(inputs); i++ {

      ret := Area(inputs[i])
      if ret != expected[i] {
         t.Errorf("input is %f , the expected is %f ,the actual %f", inputs[i], expected[i], ret)
      }
   }
}

测试结果

在这里插入图片描述

没毛病

测试代码编写完后,可以使用go test命令对指定文件进行单元测试,-v参数表示输出详细信息,

在这里插入图片描述

小改了一下文件名,不影响

在这里插入图片描述

可以看见所有函数都通过了测试,结果为PASS。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Java实战]Squaretest单元测试生成利器...一天生成所有简单单元测试...[新手开箱可用]

Squaretest单元测试生成利器...一天生成所有简单单元测试...[新手开箱可用]1.Squaretest是什么?2.如何配合JUnit使用...?3.生成的java文件长啥样?4.如何生成和使用?5.如何用生成的XXXTest.java文件进行单元测试...6.观察结果7.单元测试成功8.源码地址为了好好写单元测试,提…

Dell inspiron 7580硬件升级_更换电池加内存条移动硬盘

文章目录前言硬件升级确认硬件型号参数拆机验证硬件更新后记前言 手上的笔记本[Dell inspiron 7580]用了几年了&#xff0c;还是刚上大学的时候买的&#xff0c;现在感觉这个配置用起来有点吃力了&#xff0c;稍微更新一下配置准备再战两年┭┮﹏┭┮ Light em up, light em u…

参数扫描文件的用法

摘要 通过控制和改变所选参数有助于检查给定光学系统的性能。 VirtualLab Fusion提供了完全灵活且计算效率高&#xff08;通过并行化&#xff09;的参数运行&#xff0c;使用户可以指定不同的参数变化方式。 作为示例&#xff0c;它可以用于所研究的任何系统参数的公差分析。 分…

Moonbeam生态说|Moonbeam Ignite重燃DeFi生态活力

日前&#xff0c;Moonbeam Network生态中两家活跃度最高的DeFi协议Moonwell和StellaSwap受邀参加Moonbeam中文社区BinanceLive直播。 作为Moonbeam生态的老朋友&#xff0c;两家项目方的联合创始人对赋能生态胸有成竹。 今年11月&#xff0c;Moonwell和StellaSwap都得到社区投票…

MORE CONVNETS IN THE 2020S: SCALING UP KER- NELS BEYOND 51 × 51 USING SPARSITY

论文链接: https://arxiv.org/pdf/2207.03620.pdf code: https://github.com/VITA-Group/SLaKlink MORE CONVNETS IN THE 2020S: SCALING UP KER- NELS BEYOND 51 51 USING SPARSITY一、引言&#xff08;二&#xff09;、大内核注意力&#xff08;二&#xff09;、卷积中的大…

I/O多路转接 —— select、poll、epoll

目录 一、概述 二、I/O多路转接 —— select 1. select函数的基本介绍 2. select的基本工作流程 3. 文件描述符的就绪条件 4. 基于select函数设计的服务器 1. 基本套接字的编写 2. select服务器的编写 5. select的优缺点 三、I/O多路转接 —— poll 1. poll函数的基…

LeetCode-1799- N 次操作后的最大分数和

1、状态压缩动态规划 我们可以使用动态规划来解决问题&#xff0c;我们利用数组dp[s]dp[s]dp[s]来表示状态为s时&#xff0c;能够去到的最大分数。由于题目限定了n的范围&#xff0c;因此我们可以利用二进制数字s来压缩状态&#xff0c;我们利用长度为m的二进制数s的每一位来表…

Javascript | Popper | 如何下载popper.min.js 与 各类js资源

文章目录问题描述解决办法问题描述 作为一个JS生手只知道使用CDN在线引用或者使用下载好的本地JS文件。 比如popper.js官网显示如下图&#xff0c;没有任何的Download按钮&#xff0c;有部分其他类的JS官网也存在同样的情况。 虽然有提供CDN&#xff0c;但因为国内网络原因&am…

Lua table(表)

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型&#xff0c;如&#xff1a;数组、字典等。 Lua table 使用关联型数组&#xff0c;你可以用任意类型的值来作数组的索引&#xff0c;但这个值不能是 nil。 Lua table 是不固定大小的&#xff0c;你可以根据自己需要…

什么是python,为什么要学习Python?

什么是python&#xff1f; 人工智能概念的兴起&#xff0c;使得Python的发展非常迅速&#xff0c;关注度也是越来越高。作为现在最热门的编程语言&#xff0c;Python简单优雅&#xff0c;用尽量少的代码写出最明白的程序&#xff0c;简单易学的特性使其拥有超高的人气&#xf…

VUE—跳转传参

目录 一、基本使用 二、$route和$router 三、路由跳转的两种方式 四、编程式导航 五、传参 六、props 一、基本使用 1、安装vue-router cnpm install --save vue-router3 如果大家用的是vue2&#xff0c;下载vue-router不设置版本好的话&#xff0c;可能会因为版本过高…

大数据Kudu(十一):ClickHouse与Kudu对比

文章目录 ClickHouse与Kudu对比 ClickHouse与Kudu对比 kudu 2015年9月28号出现第一个测试版本0.5.0,2016年2月26第一个正式版0.7.发布。clickhouse 2018年3月开源正式版出现。两者都是列式存储,都可以针对数据进行实时OLAP分析,两者的区别如下: 方面 Kudu

零基础小白如何做到5个月学成Python?学习规划在这里!

自学半个月没用不是正常的吗&#xff1f;一般来说&#xff0c;Python培训需要脱产学习5个月左右&#xff0c;这样的市场既能掌握工作所需的技能&#xff0c;还能够积累一定的项目经验。 当然&#xff0c;如果你想要在Python的路上越走越远&#xff0c;则需要不断的积累和学习&…

实验二 单隐层神经网络

一、实验目的 &#xff08;1&#xff09;学习并掌握常见的机器学习方法&#xff1b; &#xff08;2&#xff09;能够结合所学的python知识实现机器学习算法&#xff1b; &#xff08;3&#xff09;能够用所学的机器学习算法解决实际问题。 二、实验内容与要求 &#xff08…

我们是如何构建自己的可观测性的

引言 近日&#xff0c;关于云平台自身的可靠性问题又成为大家关注的焦点。系统一定会有故障&#xff0c;相信作为用户都能理解&#xff0c;但用户需要在故障发生后&#xff0c;能尽快知晓造成故障的根本原因和修复计划&#xff0c;以便有效调整受影响的业务来降低损失&#xf…

盘点2022年电视行业:科技与美学的战场三星缔造“生活方式”的全新价值

作者 | 曾响铃 文 | 响铃说 前不久&#xff0c;中国质量协会第十一次组织开展了本年度电视行业用户满意度监测&#xff0c;监测对象为市场占有率达90%以上的10个主流电视品牌&#xff0c;结果显示2022年电视行业用户满意度为83分&#xff0c;同比持平&#xff0c;处于较高水平…

【Ctfer训练计划】——(三)

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门 创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座…

Linux系统安装Zookeeper教程

原文链接 在root账户下创建zookeeper安装目录&#xff1a; mkdir /home/zookeeper进入zookeeper目录&#xff1a; cd /home/zookeeper通过wget命令下载zookeeper安装包&#xff1a; wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0…

spring+jsp面向社区健康服务的医疗平台

目录 第一章 绪论 5 1.1 研究背景 5 1.2系统研究现状 5 1.3 系统实现的功能 6 1.4系统实现的特点 6 1.5 本文的组织结构 6 第二章开发技术与环境配置 7 2.1 Java语言简介 7 2.2JSP技术 8 2.3 MySQL环境配置 8 2.5 mysql数据库介绍 9 2.6 B/S架构 9 第三章系统分析与设计 11 3…

WebDAV之葫芦儿·派盘+FX文件管理器

FX文件管理器 支持WebDAV方式连接葫芦儿派盘。 想要一款几乎强大到极致的文件/媒体管理器,同时支持手机、电脑文件共享?推荐您选择FX File Explorer,您就可以快速轻松地管理您手机或平板上的所有内容。 FX File Explorer是一个多功能的手机文件流量和管理工具。它的界面美…