四川省城乡建设厅官方网站,wordpress文章加版权声明,wordpress 后门检查,sae wordpress 升级接着上一篇中的go module创建项目calc为例#xff0c;在simplemath包中#xff0c;是使用在命令行中使用交互式的方式进行测试#xff0c;现在可以为这几个函数实现单元测试#xff0c; go test#xff0c;这个测试工具来自于 Go 官方的 gc 工具链。 运行 go test 命令将执…接着上一篇中的go module创建项目calc为例在simplemath包中是使用在命令行中使用交互式的方式进行测试现在可以为这几个函数实现单元测试 go test这个测试工具来自于 Go 官方的 gc 工具链。 运行 go test 命令将执行当前目录下的包的测试代码它会寻找 *_test.go 文件并在这些文件中寻找符合 TestXxx(*testing.T){} 命名的函数和参数即接收 *testing.T 参数的函数命名为 TestXxxXxx 可以是任何不以小写字符开头的名字。这个测试代码不会影响正常的编译过程只在执行 go test 时被使用如果对pytest有过了解这个就可以轻松使用
编写单元测试
接着新增add_test.go和sqrt_test.go两个文件分别为add.go和sqrt.go编写单元测试目录如下所示 其中add_test.go如下
package simplemathimport testingfunc 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