go 为方便单元测试的函数

Go语言圣经 - 第11章 测试 - 11.1 go test & 11.2 测试函数 第11章 测试 软件测试是一个巨大的领域,但是Go语言的测试技术是相对比较低级的,它依赖一个Go test测试命令和一组按照约定方式编写的测试函数,测试命令可以运行这些函数 在实践中,编写测试代码和编写程序本身并没有多大区别 11.1 go test go test 命令是一个按照一定的约定和组织来测试代码的程序。在包目录内,所以有以 _test.go为后缀名的源文件在执行go build时不会被构建成包的一部分 在*_test.go文件中,有三种类型的函数,测试函数、基准测试函数、示例函数 测试函数:以T 阅读详情

写go语言程序,在单元测试时,经常需要比较两个值是否相等,比较一个值是否为nil,或者是否抛出了panic。分别写了如下三个函数来进行判断。具体应用时,可以根据实际情况进行调整。

func verify(t *testing.T, fun string , output, expected interface{}){
      if output != expected {
        t.Errorf( "%s: output %v != %v", fun, output, expected)
    } 
}

func verifyNil(t *testing.T, fun string , output interface{}){
      v := reflect.ValueOf(output)
      if v.IsValid() && !v.IsNil() {
        t.Errorf( "%s: output %v is not nil", fun, output)
    } 
}

func verifyPanic(t *testing.T, fun string , errType interface{}, expectedMsg string){
      msgFeild := "Message"

      e := recover()
      if e == nil {
            t.Errorf( "%s: expected error [%T], but a nil!", fun, errType)
             return
      }

      if reflect.TypeOf(errType) != reflect.TypeOf(e) {
            t.Errorf( "%s: expected error [%T], but [%T]!", fun, errType, e)
             return
      }

    errMsg := reflect.ValueOf(e).Elem().FieldByName(msgFeild)
    if errMsg.String() != expectedMsg {
      t.Errorf("%s: expected error message [%s], but [%s]!", fun, expectedMsg, errMsg)
      return
    }
}

1. 判断两个值是否相等,如下代码:

verify(t, "TestStateMachine 1", sm.GetCurrentState().ID(), "s2")
sm.SendEvent(e2)
verify(t, "TestStateMachine 2", sm.GetCurrentState().ID(), "s3")
sm.SendEvent(e3)
verify(t, "TestStateMachine 3", sm.GetCurrentState().ID(), "s1")

为了区分是在哪儿没有测试通过,在传入参数名时,加了序号。

2. 判断一个值是否为nil,如下代码:

verifyNil(t, "TestStart 1", sm.GetCurrentState())
verifyNil(t, "TestStart 2", sm.GetEvent())

3. 判断是否抛出了panic,如下代码:

expected := "Has no action executor for [ao2]."
defer verifyPanic(t, "TestHasNoActionExecutor", (*IllegalActionError)(nil), expected)

抛出panic处的代码如下:

panic(&IllegalActionError{"Has no action executor for [" + execName + "]."})
golang单元测试 若有一个需要被单测的函数 现在写一个单测 单测主函数 初始化逻辑可以放在TestMain中,然后测试入口就可以从TestMain中进入 单测断言 golang的标准库没有断言,那么为什么呢?看看官方解释: 即如果想要写单测,可以考虑引用一个第三方库,这个比较常用然后常见的断言手段 当然用可以打印出很多信息... 阅读详情

相关推荐

使用vite+react+ts+Ant Design开发后台管理项目(四)

本文将引导开发者从零基础开始,运用、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术工具,从项目构思到最终实现的全过程,提供清晰的开发思路和实用的技术应用技巧。使用vite+react+ts+Ant Design开发后台管理项目(一)使用vite+react+ts+Ant Design开发后台管理项目(二)

lbking666666的专栏 2006

golang:如何对私有函数进行单元测试

在待测试的私有函数所在的包内,新建一个xx_test.go文件,书写方式如下: import ( "github.com/stretchr/testify/assert" "testing" ) var XXFunc = yourPrivateFunc func TestXXFunc(t *testing.T) { ret, ... := XXFunc(...) assert.Equal(t, ret, ...) } 就可以了 ...

golang 2345

PX4/ArduPilot源码克隆提速秘籍:国内镜像与子模块优化全攻略

本文详细介绍了PX4/ArduPilot源码克隆的提速秘籍,包括使用国内镜像源和子模块优化技巧。通过阿木实验室、华为云等国内镜像,克隆速度可提升20倍,同时提供子模块替换和并行编译等实用方法,大幅提升开发效率。

weixin_29251567的博客 522

(九)Go------捕获异常(defer,panic,revover)单元测试

文章目录一. Go 捕获异常defer和recover捕获异常二. Go 单元测试go test 常见参数单元测试文件代码规则练习1. 数字阶乘2. 斐波那契数列(Fibonacci)三. Go defer 延迟1. 遇到了闭包2. defer陷阱 一. Go 捕获异常 不同于其他语言 引入了defer、panic、recover defer和recover捕获异常 Go程序抛出一个panic异常,在defer中通过recover捕获异常,然后处理 package main import "fmt" f

weixin_45697293的博客 1483

穿透鼠标实现后台点击,适用于任何窗口!【后台鼠标】【风雪】

也许你就是被这标题吸引来的,呵呵!好久没发帖了,勾引一下大家的胃口,当然有的人已经猜出原理了!既然来了,都要把原理学回家,不然就没意思了!很多游戏现在都不支持后台消息鼠标,要实现真的不是简单的,什么注入dll啊,什么hook俺也学不懂,那就简简单单另辟蹊径了下面来讲讲原理吧(下面的玩玩可以,用于实际不现实,俺也不藏了,看到这么多人回复,良心过意不去,呵呵)首先,将要点击的窗口上面覆盖的所有窗...

weixin_34129145的博客 1万+

昇腾Atlas Duo 300I推理卡实战:从零部署Qwen大模型推理服务

本文详细记录了在华为昇腾Atlas Duo 300I推理卡上,从零部署Qwen1.5-14B-Chat大模型推理服务的完整实战过程。涵盖环境准备、MindIE容器配置、CANN工具链安装、服务启动与API测试等关键步骤,并分享了性能观察与排错经验,为国产AI算力平台部署LLM推理服务提供了实用指南。

weixin_29084231的博客 1233

深入理解Go语言中的函数【单元测试】14

深入理解Go语言中的函数【单元测试】14

m0_52896752的博客 678

华为OD新系统机试真题 - 获取大写字母瓷砖拼出独特图案数量

华为OD机试新系统真题【获取大写字母瓷砖拼出独特图案数量】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统四月二十九号机试真题【获取大写字母瓷砖拼出独特图案数量】

qq_45776114的博客 1218

GoLang 单元测试打桩和 mock

单元测试,顾名思义对某个单元函数进行测试,被测函数本身中用到的变量、函数、资源不应被测试代码依赖,所谓 mock,就是想办法通过 “虚拟” 代码替换掉依赖的方法和资源,一般需要 mock 掉以下依赖:变量函数/方法MySQLRedishttp 调用。

程序猿的世界 6650

GD32F130之USART多机通信

简介 在多机通信中,一个从机应该只接收它需要接收的数据,且只应该在它需要接收数据时才检测串口。而始终接收RX线上的数据对从机来说是一种负担。 多机通信硬件设计 远距离方案:RS485 板级方案: 静默模式 静默模式有什么作用? 答:如果 USART 处于静默模式,所有的接收状态标志位将不会被置位。 如何进入静默模式? 答:软件可以通过将 USART_CMD 寄存器中MMCMD 位置 1 使 USART 进入静默模式。 如何从静默模式中唤醒? 答:有两种方式可选,①检测到总线

luliplus的博客 299

编织数据的实时脉络——构建基于MySQL的数据编织平台,实现实时数据治理

除了上述基本设置外,我们还可以根据实际应用场景自定义一些特定的监控项目。例如,对于某些高并发读写的表,可能需要特别关注它们的锁等待时间和回滚段使用率;而对于涉及到跨库关联查询的操作,则应当着重检查网络延迟及缓存命中率等因素。-- 获取InnoDB行级锁等待情况-- 统计各表的缓存命中率这段SQL脚本不仅展示了如何查询InnoDB引擎下的锁争用状况,还介绍了计算表级别缓存命中率的方法,有助于深入理解系统的运行状态。

墨夶的博客 1789

go 单元测试—只执行指定的单元测试函数

本文介绍go单元测试中,如何执行指定的单元测试函数。 首先看下示例代码。 新建目录utils,目录有以下文件 ll total 16 -rw-r--r-- 1 lanyang staff 132B 12 31 21:09 add_hint.go -rw-r--r-- 1 lanyang staff 360B 12 31 21:09 add_hint_test.go add_hint.go 文件内容如下: package utils func AddPrefix(s string) st

翔云 6448

CodeBuddy Code CLI 常用工作流:17个实战场景全解析

CodeBuddy Code CLI 17个实战场景解析 本文详细介绍了CodeBuddy Code CLI在17个开发场景中的高效应用,包括: 快速理解新代码库 高效修复Bug 安全重构代码 使用子代理系统处理专业任务 Plan Mode安全分析 自动化测试处理 创建合并请求 文档生成与维护 图片内容分析 文件目录快速引用 每个场景都配有具体命令示例和最佳实践,帮助开发者提升工作效率。

简简单单Onlinezuozuo 1078

go 基准测试 找不到函数_golang系列——单元测试

在golang语言中,通过go test和一些特殊的规则能快速实现单元测试。再正式介绍之前,先说一个坑。坑:相同package中不同文件里的函数调用在如下所示的目录结构中,我希望从main中调用add.go里的Add函数实现加法功能。- 然而通过go run main.go后,一直提示add函数未定义,而Add的确是定义过了。# 排查后才发现这种目录结构和场景时,不能使用go run main.g...

weixin_39976575的博客 442

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

go 基准测试 找不到函数_Golang笔记-单元测试test初探

为什么需要单元测试其实在很长一段时间,包括现在,我都很不喜欢写单元测试。因为维护单元测试的成本很高。只有接口做了一点变更,那么单元测试就必须做相同的变更,否则会导致测试不通过。那么反过来,只要每次在提交代码都去运行一次单元测试。这样可以很快的检查到你对代码更改是否影响了正常的业务逻辑,当然很大一部分是可能是别人写的那部分代码。因为你不确定本次的修改是否会影响到别人的那部分。所以单元测试还是很有必要...

weixin_39845220的博客 523

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

[Go] go test单元测试执行指定测试函数

go test 可以执行单元测试 , 一般把所有go文件测试单元都执行一遍 现在如果想要执行某一个指定的测试函数 , 可以像这样 go test -v -run 测试函数名字 例如: rpc_test.go package tools import ( "go-fly-muti/frpc" "testing" ) func TestClientRpc(t *testin...

程序员老狼专注开发aigc或客服系统应用 2498

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Golang 单元测试编写以及规范

Golang语言提供了一套单元测试编写规范,下面简单演示一下这个写法 单元测试文件必须以.go结尾 测试函数非常简单 calc.go package main func add(a, b int) int { return a + b } calc_test.go package main import "testing" func TestAdd(t *testing...

wwxy1995的博客 916

golang单元测试示例

golang UnitTest的书写规范和简单适用 规范: 单元测试文件名必须以xxx_test.go命名 测试函数必须是TestXxx开头 方法参数必须 t *testing.T 测试文件和被测试文件必须在一个包中 示例: hello.go package main func add(x int,y int)int{ return x+y } main_test.go//单元测试文...

疯狂的鸭血 524

巧用 Golang 函数特性实现单元测试中的数据库操作 Mock

本文介绍了一种基于Golang函数特性的Mock方案,用于解决单元测试中数据库依赖问题。通过将数据库操作封装为函数变量,在测试时重新赋值这些变量来模拟数据库行为,实现测试与数据库的解耦。该方法利用Golang函数作为"一等公民"的特性,无需引入复杂框架即可实现简洁高效的Mock功能。示例代码展示了如何模拟数据库查询结果和并发场景测试。该方案优势包括:消除数据库依赖、简化测试数据准备、提升测试效率、便于模拟特殊场景,同时保持代码简洁性,特别适合业务逻辑复杂、数据库操作频繁的项目场景。

ezreal_pan的博客 669

Golang单元测试和压力测试

go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程类似,并不需要学习新的语法,规则和工具。go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终可执行文件中。在*_test.go文件中有三种类型的函数,单元测试函数,基准测试函数和示例函数。

weixin_57023347的博客 2784

[Go] Golang练习项目-go test单元测试报错undefined函数未定义

在执行go test命令的时候,如果是测试同一个包中的函数,需要把所涉及的文件都写在参数部分 例如: 涉及的文件不多,可以把文件都写上一同编译 如果涉及的文件太多,直接在包下执行go test ...

程序员老狼专注开发aigc或客服系统应用 1360

golang单元测试一(简单函数测试)

单元测试是测试代码、组件和模块的单元函数。单元测试的目的是清除代码中的错误,增加代码的稳定性,在更改代码时提供正确性。单元测试是软件测试的第一级,然后是集成测试和 ui 测试。

liuyuede123的博客 852

go test 找不到函数_聊聊Go的Package单元测试(UT)

写这篇文章前,我主要思考了几个问题:(1)如果说main可以用dlv工具来debug,那么package怎么验证写的函数的准确性?(2)难道每次都要build && run,然后tail log调试吗?(3)如何使用go test的基准测试?(4)如何统计单元测试的覆盖率?因此,对于package的function,我们用unit test来验证其准确性。本文举个栗子分别实现:te...

weixin_36182226的博客 803

【Golang】第十弹----单元测试、go协程和管道

Go单元测试、goroutine、channel

2302_80713883的博客 5132

golang 单元测试命令

golang 单元测试命令

Lai助网络科技的博客 328

golang单元测试之生成二进制测试文件

一、golang单元测试规范介绍: 1、单元测试文件名称:*_test.go; 2、单元测试文件中,函数的名称为:TestXXX,其中xxx必须以大写字母开头; 二、当执行go test命令进行单元测试时,*_test.go文件中要测试的函数没在该文件中定义,而是在其它源文件(.go文件)中定义的,需要把对应源文件也作为go test命令的参数,比如源码文件结构如下所示...

metheir的博客 5822
上一篇: go 有限状态机
下一篇: Ubuntu Server上禁止服务
niuwq
博客等级 码龄25年 9粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值