当前位置: 首页 > news >正文

go单元测试

接着上一篇中的go module创建项目calc为例,在simplemath包中,是使用在命令行中使用交互式的方式进行测试,现在可以为这几个函数实现单元测试, go test,这个测试工具来自于 Go 官方的 gc 工具链。
运行 go test 命令将执行当前目录下的包的测试代码,它会寻找 *_test.go 文件,并在这些文件中,寻找符合 TestXxx(*testing.T){} 命名的函数和参数(即,接收 *testing.T 参数的函数,命名为 TestXxxXxx 可以是任何不以小写字符开头的名字)。这个测试代码不会影响正常的编译过程,只在执行 go test 时被使用,如果对pytest有过了解,这个就可以轻松使用

编写单元测试

接着新增add_test.gosqrt_test.go两个文件,分别为add.gosqrt.go编写单元测试,目录如下所示
在这里插入图片描述
其中add_test.go如下

package simplemathimport "testing"func TestADD(t *testing.T) {r := Add(1, 2)if r != 3 {t.Errorf("Add(1, 2) failed, Got %d, expected 3.", r)}
}

sqrt_test.go如下

package simplemath
import "testing"
func TestSqrt(t *testing.T) {v := Sqrt(9)if v != 3 {t.Errorf("Sqrt(9) failed. Got %v, expected 3.", v)}
}

在编写单元测试时,需要引入testing包,类似pytest中的pytest包,go中的单元测试标准类型如下:

func TestXXX(t *testing.T) {// 测试逻辑
}

运行单元测试

使用goland编译器,选择要执行的单元测试的包,如这里的simplemath,然后痛右键菜单执行,这里和pytest几乎没有差异,因为goland和pycharm也是全家桶中的成员,所以如果之前使用过pytest和pycharm的搭配,这里就很容易上手
在这里插入图片描述
接着可以看到执行输出窗口如下
在这里插入图片描述
当然也可以在test测试文件点击如下所示,点击包名左侧的执行按钮,和上述点击工程目录栏是一样的效果
在这里插入图片描述
对应点击测试函数右侧的执行符号,则执行单个测试函数或者测试类。
我们知道负数无法平方根的,因此这里还要测试下sqrt函数的无效等价类测试

func TestNegativeSqrt(t *testing.T) {v := Sqrt(-9)if v != 3 {t.Errorf("Sqrt(9) failed. Got %v, expected 3.", v)}
}

输出如下所示
在这里插入图片描述

这里执行时就会报错,如果执行代码发现的❎,一方面可以使用goland自身的debug,此外还可以使用GDB进行调试,是一个由 GNU 开源组织发布的、Unix/Linux 操作系统下的、基于命令行的、功能强大的程序调试工具,Go 语言编译后的二进制文件支持通过 GDB 进行调试,比如上篇教程通过 go build calc 编译出来的可执行文件 calc,就可以直接用以下命令以调试模式运行

gdb calc

注:Windows 系统不支持该工具,Mac 下可以通过 brew install gdb 命令安装
然后,你就可以通过 GDB 支持的指令以命令行的方式对 Go 代码进行调试了,你可以通过 l 指令查看代码:
在这里插入图片描述

GDB 代码调试
要跳到某一行查看通过 l 传入行数即可:
在这里插入图片描述

GDB 代码调试
要为某一行设置断点可以通过 b 来实现:
在这里插入图片描述

GDB 代码调试
然后通过 run 命令来运行程序,如果是在 Mac 系统上,可能会报下面这个错:
在这里插入图片描述

GDB 代码调试
这是因为 Darwin 内核在你没有特殊权限的情况下,不允许调试其它进程。调试某个进程,意味着你对这个进程有完全的控制权限,所以为了防止被恶意利用,它是默认禁止的。允许 gdb 控制其它进程最好的方法就是用系统信任的证书对它进行签名,对应的解决方法参考这里:https://opensource.apple.com/source/lldb/lldb-69/docs/code-signing.txt(中文对应的解决方式)。

进入下一行可以用 n 指令,打印变量可以用 p 指令传入变量名。。。更多指令使用我就不深入展开了,因为对于新手来说,不推荐使用 GDB 进行代码调试,直接使用 GoLand 更友好,不是吗?如果你想探究 GDB 调试的更多用法,请查看对应的官方文档 Debugging Go Code with GDB

http://www.lryc.cn/news/19212.html

相关文章:

  • Mybatis之一级缓存二级缓存
  • 人脸考勤机项目
  • Python编程自动化办公案例(3)
  • Linux-MYSQL 登录数据库(命令行,图形化) 及 远程登录
  • electron网络环境在线/离线事件探测
  • UE 项目导航数据生成配置
  • 494.目标和
  • 滑台模组的应用有哪些?
  • CS224W课程学习笔记(四):node2vec算法原理与说明
  • 扩展lucas定理
  • 医疗影像工具LEADTOOLS 入门教程: 从 PDF 中提取附件 - 控制台 C#
  • 【LVGL】学习笔记--(1)Keil中嵌入式系统移植LVGL
  • Transformer学习笔记
  • vue-cli引入wangEditor、Element,封装可上传附件的富文本编辑器组件(附源代码直接应用,菜单可调整)
  • 移动办公时代,数智化平台如何赋能企业管理升级?
  • 2023“拼夕夕”为什么可以凭借简单的拼团做这么大?
  • sqlmap工具
  • 高/低压供配电系统设计——安科瑞变电站电力监控系统的应用
  • Tapdata 和 Databend 数仓数据同步实战
  • 单核CPU, 1G内存,也能做JVM调优吗?
  • 《计算机应用研究》投稿经历和时间节点
  • mars3d获取视窗的范围
  • 《高性能MySQL》读书笔记(上)
  • 05-代理模式
  • RocketMQ源码分析之消费队列、Index索引文件存储结构与存储机制-上篇
  • 基于Java的浏览器的设计与实现毕业设计
  • 手把手教你使用vite打包自己的js代码包并推送到npm
  • Tomcat源码分析-关于tomcat热加载的一些思考
  • DataWhale 大数据处理技术组队学习task4
  • Oracle 12C以上统计信息收集CDB、PDB执行时间不一致问题