Go 语言学习系列(六): test
go 里面的 unit test 核心就是 go test
命令.
还有一个文件名字格式的问题, 一般 test 文件是 _test.go
那么咱们建一个这样的文件.
然后把下面的代码粘贴进去:
package greetings
import (
"testing"
"regexp"
)
// TestHelloName calls greetings.Hello with a name, checking
// for a valid return value.
func TestHelloName(t *testing.T) {
name := "Gladys"
want := regexp.MustCompile(`\b`+name+`\b`)
msg, err := Hello("Gladys")
if !want.MatchString(msg) || err != nil {
t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)
}
}
// TestHelloEmpty calls greetings.Hello with an empty string,
// checking for an error.
func TestHelloEmpty(t *testing.T) {
msg, err := Hello("")
if msg != "" || err == nil {
t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)
}
}
这样我们就完成了一个 test, 然后我们使用命令行执行命令就可以了:
go test
运行结果如下:
还可以执行 -v 来获取执行测试脚本的细节.
go test -v
OK, 现在我们模拟一个新手不小心修改坏了 greeting 文件中的代码, 比如改成下面:
// Hello returns a greeting for the named person.
func Hello(name string) (string, error) {
// If no name was given, return an error with a message.
if name == "" {
return name, errors.New("empty name")
}
// Create a message using a random format.
// message := fmt.Sprintf(randomFormat(), name)
message := fmt.Sprint(randomFormat())
return message, nil
}
这个时候再次运行 test 的时候, 就会出现:
这样就完成了单元测试, 学会了吗?