Go testing 单元测试
文章目录
- 1. 基础单元测试 (basic test)
- 2. 表组测试(table test)
- 3. 模仿测试(mocking test)
- 4. 测试服务端点
可以使用: go test -v 在文件所在位置测试代码
go test -v
-v 提供 冗余输出: 如果不加 “-v” 除非测试失败,否则无法看到任何测试输出
Note:
- go 语言的测试工具只会认为以 _test.go 结尾的文件是测试文件,一旦测试工具找到了测试文件,就会找到里面的测试函数并执行。
注:如果没有遵循该约定,就不会有测试报告
- 一个测试函数必须是公开的函数,以Test开头, 并且函数的签名必须接受一个指向testing.T 类型的指针,并且不用返回任何值
注:如果没有遵循该约定,测试框架将无法识别测试函数并执行
testing.T 类型指针
t *testing.T
t.Log: 输出测试的消息
t.Logf: 格式化消息t.Fatal: 不单报告单元测试已经失败,而且会向测试输出写入一些消息,然后立刻停止这个测试函数的执行(如果还有其他的测试函数,会继续执行其他的测试函数)
t.Fatalf: t.Fatal 的格式换版本t.Error: 报告测试的失败,但不会停止当前测试函数的执行
t.Errorf: t.Error 的格式化版本
1. 基础单元测试 (basic test)
Get 基础单元测试
// 基础单元测试
package basic_testimport ("net/http"// testing 包提供了从报告测试的输出和状态的各种测试功能"testing"
)// 声明对号(√)
const checkMark = "\u2713"
// 声明叉号(x)
const ballotX = "\u2717"// TestDownload 测试函数
// 一个测试函数必须是公开的函数,且以Test开头
// 函数的签名必须接受一个指向testing.T 类型的指针,并且不用返回任何值
func TestDownload(t *testing.T) {// 声明url 和 状态码url := "http://www.goinggo.net/feeds/posts/default?alt=rss"statusCode := 200t.Log("Given the needs to test downloading content."){t.Logf("\tWhen checking \"%s\"for status code \"%d\"", url, statusCode){resp, err := http.Get(url)if err != nil {t.Fatal("\t\t Should be able to make the Get call.", ballotX, err)}t.Log("\t\tShould be able to make the Get call.", checkMark)defer resp.Body.Close()if resp.StatusCode == statusCode {t.Logf("\t\tShould receive a \"%d\" status. %v", statusCode, checkMark)} else {t.Errorf("\t\tShould receive a \"%d\" status. %v %v", statusCode, ballotX, resp.StatusCode)}}}
}
如果测试函数没有调用过 t.Fatal 或 t.Error 方法,就任务 测试通过了
2. 表组测试(table test)
表组测试可以接收一组不同的输入并产生不同的输出代码
// 表组测试
package table_testimport (
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
