3.1 测试
层级从上到下覆盖率逐步上升,成本下降
回归测试
集成测试
3.1 单元测试
测试规则:
-
所有测试文件以
_test.go结尾 -
func TestXxx(*testing.T) -
初始化逻辑放在
TestMain中 -
go test [flags] [packages]运行 -
assert包:验证(assert.Equal())
3.1.2 覆盖率
条件覆盖指在测试时运行被测程序后,所有判断语句中每个条件的可能取值(真值和假值)出现过的比率:
条件覆盖率=(条件操作数值至少被评价一次的数量)/(条件操作数值的总数)
func TestJudgePassLineTrue(t *testing.T){
isPass := JudgePassLine(score: 70)
assert.Equal(t,true, isPass)
}
func TestJudgePassLineFail(t *testing.T){
isPass := JudgePassLine( score: 50)
assert.Equal(t,false,isPass)
}
func JudgePassLine(score int16) bool {
if score ≥ 60{
return true
}
return false
}
//只有第一个函数时覆盖率是66.7%
//覆盖率100%
3.2 依赖
func ReadFirstLine() string {
open, err := os.Open("log")
defer open.Close()
if err ≠ nil {
return ""
}
scanner := bufio.NewScanner(open) //创建一个scanner,将open与scanner对象关联起来
for scanner.Scan() {
return scanner.Text() //逐行读取
}
return "" //否则返回空字符
}
func ProcessFirstLine() string {
Line := ReadFirstLine()
destLine := strings.ReplaceAll(line, "11","00") //将00代替11
return destLine
func TestProcessFirstLine(t*testing.T){ //
firstLine := ProcessFirstLine()
assert.Equal(t,"line00",firstLine)
3.3 Mock
通过“虚拟”代码替换掉依赖的方法和资源
//用Mock替换了ReadFirstLine函数,不再依赖原文件,
func TestProcessFirstLineWithMock(t *testing.T){
monkey.Patch(ReadFirstLine,func() string {
return "line110"
}) // func() string{return "line110"} 是匿名函数
defer monkey.Unpatch(ReadFirstLine)
Line := ProcessFirstLine()
assert.Equal(t,"line000",Line)
}
匿名函数
func(a, b int) int { return a + b }(3, 4) //后面的括号是传入的参数
3.4 基准测试 Benchmark
基准测试是一种测量和评估软件性能指标的活动。
//随机服务器
import (
"math/rand"
)
var ServerIndex [10]int
func InitServerIndex() {
for i := 0; i< 10; i++ {
ServerIndex[i] = i+100
}
}
func Select() int {
return ServerIndex[rand.Intn(10)] //设定随机整数,上限是10 // 用fastrand并行效率更高
}
// 基准测试
func BenchmarkSelect(b *testing.B){
InitServerIndex()
b.ResetTimer() //定时器重置
for i:= 0; i<b.N; i++ {
Select() //循环多次调用函数计时
}
}
func BenchmarkSelectParallel(b *testing.B) {
InitServerIndex(
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) { //并行调用函数并计时
for pb.Next() {
Select()
}
})
}
4.1 实战项目
- 需求描述:社区话题页面
- 展示话题(标题,文字描述)和回站列表
- 暂不考虑前端页面实现,仅仅实现一个本地web服务
- 话题和回帖数据用文件存储
- 需求用例
- E-R图
- 分层结构
- 组件工具