Go项目的测试代码1(基础)
最近写了测试代码,整理了一下。
先看看简单的测试代码.
// add_test.go ==> 文件名 _test.go 结尾的默认为测试代码文件 package models import ( "testing" ) //Test开头的默认为测试方法 func TestAdd(t *testing.T) { //arrange var x, y, res int x = 2 y = 3 //act result = Add(x, y) //assert if result != 5 { t.Fatal("Add的结果不正确") } }
// add.go package models func Add(x, y int) int { return x + y }
查看测试结构。
$ go test -v ==> 依次运行当前package的 _test.go文件的测试方法。 === RUN TestAdd --- PASS: TestAdd (0.00s) PASS ok gotest/test5 0.006s
目前编写测试代码普遍公认的模板结构。
1)arrange: 测试之前需要准备的代码。
2)act: 实际要测试的方法。
3)assert: 结果确认。
如果测试不通过呢?
//assert if result != 6 { //==>结果改成 6 t.Fatal("Add的结果不正确") }
$ go test --- FAIL: TestAdd (0.00s) add_test.go:36: Add的结果不正确 FAIL exit status 1 FAIL gotest/test5/models 0.006s
也可以写一个公用的比较方法, 自定义输出结果。
package test import ( "reflect" "testing" ) func Equal(t *testing.T, exp, got interface{}) { if !reflect.DeepEqual(exp, got) { t.Errorf("\033[31m\n exp: %v \n got: %v \033[39m\n", exp, got) t.FailNow() } }
//assert if result != 6 { //==>结果改成 6 t.Fatal("Add的结果不正确") } //=====>> 比较的方法改用自己写的test包的Equal方法。 //assert test.Equal(t, result, 6)
输出测试未通过的代码位置,以及比较结果。
$ go test --- FAIL: TestAdd (0.00s) test.go:10: exp: 5 got: 6 FAIL exit status 1 FAIL gotest/test5/models 0.007s
这样可以按照自己的喜好来自定义提示了。
覆盖率
go test -cover
go test -cover go test -cover -coverprofile=coverage.out go tool cover -html=./coverage.out
可以查看测试代码的覆盖率,这只是一个补助的功能。
不需要过分的要求高覆盖率,因为维护测试代码也是耗精力的。
下篇文章介绍项目中我是怎么写测试代码的…^^
未完继续
----------------------------------------------
欢迎大家的意见和交流
email: li_mingxie@163.com
博客:https://limingxie.github.io/