做一个测试

现在呢,你一定已经把你的代码放在了安全的地方,并做了测试.在编码期间做测试能帮助你发现bug.在本节中,使用hello函数来做测试.

Go语言内置单元测试,以方便你即使测试代码,具体来说,使用命名规范、Go的test包和Go test命令,您可以快速编写和执行测试。
在greeting路径下,创建一个名为 greetings_test.go的文件
  文件名以_test.go结尾,是用来告诉go test命令 这个文件包含test函数
在greeting_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(``+name+``)
    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函数
  • 创建了两个测试函数为了测试greetings.Hello函数,测试函数名称的格式是 TestName, Name表述了具体做哪项测试,此外,测试函数 有个指针参数testing 它来源于testing包,你可以使用这个参数方法,来报告和记录你的测试.
  • 实现了两个测试
      TestHelloName调用了Hello函数,传入一个name值应该能返回一个响应消息,如果这个调用返回了一个错误或意外相应消息,你可以使用 t 参数的Fatalf 方法来将消息打印到控制台并结束执行。
      TestHelloEmpty调用Hello函数,传入一个空字符串,这个测试是用来确认你的错误处理能正常工作,如果这个调用返回了一个非空错误或没有返回错误,你可以使用t 参数的Fatalf方法,将详细打印到控制台并结束执行.

3.在greeting路径的命令提示符下,运行go test命令,来执行测试
  go test命令执行测试文件(这些文件都会以_test.go作为结尾)中的测试函数(这些函数都会以test开头), 你也可以添加-v 标识参数来输出,所有测试结果.

$ go test
PASS
ok      example.com/greetings   0.364s

$ go test -v
=== RUN   TestHelloName
--- PASS: TestHelloName (0.00s)
=== RUN   TestHelloEmpty
--- PASS: TestHelloEmpty (0.00s)
PASS
ok      example.com/greetings   0.372s

4.查看失败的测试,
  在TestHelloname测试函数中检查返回值,为了能够产生失败的测试效果,需要把greeting.Hello函数的打印name的输出删去.
  在greeting/greetings.go中,粘贴下面代码来代替Hello函数,注意,高亮行改变了函数的返回值,相当于,name参数被意外删除

// 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
}

5.在greeting路径下,运行go test命令
  这次,运行 go test 命令但不加-v标识参数,于是,输出中只会包含测试失败信息,当有大量测试时,这会很有用,TestHelloName测试应该会失败,TestHelloEmpty会一直通过测试

$ go test
--- FAIL: TestHelloName (0.00s)
    greetings_test.go:15: Hello("Gladys") = "Hail, %v! Well met!", <nil>, want match for `Gladys`, nil
FAIL
exit status 1
FAIL    example.com/greetings   0.182s

接下来,你将会看到,如何在本地编译并安装代码

原文地址:https://www.cnblogs.com/yaoshi641/p/15242998.html