常见网站建设公司术语市场调研的方法有哪些
接着上一篇中的go module创建项目calc
为例,在simplemath
包中,是使用在命令行中使用交互式的方式进行测试,现在可以为这几个函数实现单元测试, go test
,这个测试工具来自于 Go 官方的 gc
工具链。
运行 go test
命令将执行当前目录下的包的测试代码,它会寻找 *_test.go
文件,并在这些文件中,寻找符合 TestXxx(*testing.T){}
命名的函数和参数(即,接收 *testing.T
参数的函数,命名为 TestXxx
,Xxx
可以是任何不以小写字符开头的名字)。这个测试代码不会影响正常的编译过程,只在执行 go test
时被使用,如果对pytest
有过了解,这个就可以轻松使用
编写单元测试
接着新增add_test.go
和sqrt_test.go
两个文件,分别为add.go
和sqrt.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