Go 语言学习系列(六): test

go 里面的 unit test 核心就是 go test 命令.

还有一个文件名字格式的问题, 一般 test 文件是 _test.go

那么咱们建一个这样的文件.

image

然后把下面的代码粘贴进去:

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

运行结果如下:
image

还可以执行 -v 来获取执行测试脚本的细节.

go test -v

image

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 的时候, 就会出现:
image

这样就完成了单元测试, 学会了吗?

posted @ 2022-09-25 15:01  YanyuWu  阅读(44)  评论(0编辑  收藏  举报