随着结构体越来越多,绑定的方法也是巨量增加,如何验证一个个函数是否正确运行呢?
一、探索
1. 处境
在练习语句、单个函数的时候,我们可以用main函数,并且包名改为main,简单直接调用一下。但随着结构体的介入,功能开始增加起来!
这个时候,不能再使用main函数,进行一个个的验证!
如何进行更有效的方法验证呢???
2. 搜寻问题
带着如何解决方法验证的问题,我们查询官方文档(https://studygolang.com/pkgdoc),找到一个testing包,官方描述如下:
# testing 提供对 Go 包的自动化测试的支持。通过 `go test` 命令,能够自动执行如下形式的任何函数:
func TestXxx(*testing.T)
如下形式???任何函数???
好像可以解决自己的问题,但是要符合他们的形式要求!!
二、思考
1. 官网案例
import "testing"
testing 提供对 Go 包的自动化测试的支持。通过 go test 命令,能够自动执行如下形式的任何函数:
func TestXxx(*testing.T)
其中 Xxx 可以是任何字母数字字符串(但第一个字母不能是 [a-z]),用于识别测试例程。
在这些函数中,使用 Error, Fail 或相关方法来发出失败信号。
要编写一个新的测试套件,需要创建一个名称以 _test.go 结尾的文件,该文件包含 TestXxx 函数,如上所述。 将该文件放在与被测试的包相同的包中。该文件将被排除在正常的程序包之外,但在运行 “go test” 命令时将被包含。 有关详细信息,请运行 “go help test” 和 “go help testflag” 了解。
如果有需要,可以调用 *T 和 *B 的 Skip 方法,跳过该测试或基准测试:
func TestTimeConsuming(t *testing.T) {
if testing.Short() {
t.Skip("skipping test in short mode.")
}
...
}
2. 案例反思
如果我们想要一个测试套件,如何复刻呢?需要注意哪些呢?
从官网案例反思如下:
- 创建文件名称必须以 _test.go 结尾
- 导入testing包
- 函数必须以:Test开头,用于识别测试例程。
- 参数类型必须是:*testing.T
三、尝试
1. 模仿
根据案例反思,进行编写测试函数
创建Sum_test.go文件
package grade120
import (
"fmt"
"testing"
)
func TestSum(t *testing.T) {
a := 10
b := 20
c := a + b
fmt.Println("c = ", c)
}
//=== RUN TestSum
//c = 30
//--- PASS: TestSum (0.00s)
//PASS
符合了上述四个要求,进行正确执行了函数、符合自己以后要验证函数的需求。
2. 扩展
上边是正确执行的函数,如果是抛出异常的函数呢?
func TestDivided(t *testing.T) {
a := 10
b := 0
c := a / b
fmt.Println("c = ", c)
}
//=== RUN TestDivided
//--- FAIL: TestDivided (0.00s)
//panic: runtime error: integer divide by zero [recovered]
// panic: runtime error: integer divide by zero
// ......
可以看到输出的错误日志
3. 自定义成功/失败
上边为程序正常和代码异常情况,有没有可以手动指定成功或者失败呢?
比如存储一条数据的时候,service返回成功或者失败,从而判断该方法是通过还是失败!
t.Logf()进行成功格式化输出
func TestDividedSuccessLog(t *testing.T) {
c := 2 + 3
t.Logf("c = %d", c)
}
//=== RUN TestDividedSuccessLog
//Sum_test.go:44: c = 5
//--- PASS: TestDividedSuccessLog (0.00s)
//PASS
t.Fatalf()进行错误格式化输出
func TestDividedLog(t *testing.T) {
c := 2 + 3
t.Fatalf("c = %d", c)
}
//=== RUN TestDividedLog
//Sum_test.go:34: c = 5
//--- FAIL: TestDividedLog (0.00s)
//
//FAIL
附
本篇为探索篇,主要是解决方法过多而造成的测试和管理,比较麻烦!
本篇内容不是很难,格式要求符合testing包要求,一般都可以进行测试进程扫描执行!
3030

被折叠的 条评论
为什么被折叠?



