测试
01.测试
测试可以分为三种,第一种是单元测试,第二种是集成测试,第三种是回归测试。回归测试是回归到终端的一种主流场景去进行测试,例如抖音的回归测试就是刷一下抖音,看一下评论这种测试。集成测试就是对于功能的集成测试,将各个功能联合起来进行测试。单元测试是面对开发阶段,开发者对某单个函数进行功能验证测试。
单元测试成本最低,覆盖率广,在一定程度上决定着开发内容的好坏。集成测试成本中等,覆盖率中等。回归测试成本最高,覆盖率最低。
02.单元测试
单元测试流程主要是输入->单元测试->输出,最后的输出结果与预期结果进行比较。单元测试中可以是测试一个函数,也可以是一个模块等等。经过单元测试可以提高代码的质量和运行的效率。
规则:
实践:
package main
import "testing"
func HelloTom() string {
return "Jerry"
}
func TestHelloTom(t *testing.T) {
output := HelloTom()
expectOutput := "Tom"
if output != expectOutput {
t.Errorf("Expected %s do not match actual %s", expectOutput, output)
}
}
输出结果:
assert
package main
import (
"github.com/stretchr/testify/assert"
"testing"
)
func HelloTom() string {
return "Tom"
}
func TestHelloTom(t *testing.T) {
output := HelloTom()
expectOutput := "Tom"
assert.Equal(t, expectOutput, output)
}
03.单元测试-覆盖率
在我们进行单元测试时需要考虑以下问题:
1.如何衡量代码是否经过了足够的测试?
2.如何评价项目的测试水准?
3.如何评估项目是否达到了高水准测试等级?
单元测试的主要评估标准是代码覆盖率,覆盖率越高则证明越多的代码经过了测试。
首先创建demo3.go,其中编写了一个判断分数是否及格的功能。
package main func judgePass(score int) bool {
if score >= 60 {
return true
}
return false
}
生成测试文件demo3_test.go,调用 judgePass 并传入一个70,将结果与true校对。
package main
import (
"github.com/stretchr/testify/assert"
"testing"
)
func Test_judgePass(t *testing.T) {
isPass := judgePass(70)
assert.Equal(t, true, isPass)
}
然后运行带有覆盖率(coverage)的测试。可以用命令单独测试某个模块(如demo3.go):
go test demo3_test.go demo3.go --cover
也可以在GoLand直接操作,点击右上角的run with coverage进行测试。测试工具会自动运行测试用例,并在执行过程中跟踪被执行的代码行数。最后,它会计算测试覆盖率并给出结果。(注意,这样执行的是该目录下的所有测试文件,给出的也是整个包的测试覆盖率结果。)