这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天。今天课程的内容主要讲解了在实际工程应用中需要注意和学习的技术。这篇笔记主要对其中项目测试的部分进行记录。
重点内容
项目测试的三种测试方法及其用途
详细知识点
一、单元测试
定义
单元测试是指是指对软件中的最小可测试单元进行检查和验证。在程序编写和项目开发中,单元测试往往是测试员对程序中的函数及模块进行测试。
基本过程
单元测试的基本流程如下
1.选定待测试的函数或模块为测试单元
2.向测试单元输入数据,获得输出数据
3.将输出数据与预期结果进行校对,得到测试结果
测试命名规则
1.测试文件以_test.go结尾,示例如下
getUserInfo_test.go
checkUserInfo_test.go
2.测试函数写作func TestXxx(*testing.T)
3.初始化逻辑放到TestMain中,TestMain的写法如下
func TestMain(m *testing.M) {
//测试前:数据装载,配置初始化等前置工作
code := m.Run()
//测试后:释放资源等收尾工作
os.Exit(code)
}
测试覆盖率
评估单元测试的一项重要指标是代码覆盖率,这里取课堂中的例子解释代码覆盖率的含义,示例代码如下
func JudgePassLine(score int16) bool {
if score > 60 {
return ture
}
return false
}
这段代码中,若测试函数输入的score为70,则函数会通过if语句中的比较,最后返回ture,此时函数的前两行被执行过,由于函数总共有三行代码,因此代码覆盖率为 2/3 ≈ 66.7%。
那么如何提高代码覆盖率呢?我们只需要在编写另外一个函数,将输入的score定为45(60以下的正整数都是可以的),对这两个测试函数一起进行测试,此时所有代码都被运行过,覆盖率自然达到100%。
tips:
1.一般情况下,在真正的项目中单元测试的代码覆盖率只要求到50%~60%,少数涉及到现金支付的环节代码覆盖率要求较高,需要达到80%以上
2.设计代码测试分支时,因当做到各个测试分支互相独立,保证对测试单元的全面覆盖
3.测试单元的选择应该尽可能小,选择的函数职责单一
二、mock测试
定义
mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试 的测试方法。在实际的工程场合,测试单元往往会依赖文件,数据库等外部因素条件,因此测试员可以利用mock创建一个测试对象进行单元测试。
基本过程
课堂中实施mock测试主要是利用了一个Go的第三方库monkey,这里的基本过程如下
1.利用快速Mock函数对函数进行打桩。
2.对ReadFirstLine进行打桩测试
3.根据输出结果进行校对
三、基准测试
定义
基准测试是指是对软件性能指标进行测量和评估的测试方法。为了优化代码的性能,测试者往往需要对工程及项目的模块进行基准测试,已找出开销较大的部分进行代码优化。
基本过程
内置的测试框架一般都会提供基准测试的能力。基本过程如下
1.利用InitServerIndex()开始基准测试,调用该函数后利用ResetTime()函数去重置计时器,消除InitServerIndex()运行所需时间对基准测试的影响。
2.执行测试程序
3.根据控制台输出的信息(一般是函数执行费时)评估代码性能
笔记总结
今天的笔记主要记录的课堂上所讲的关于测试的内容。项目测试是我在过去的学习工作中接触最少的一方面内容,因此我特别地把这部分整理为笔记。而对于记录的三种测试方法,尽管我跟着老师的操作尝试了一遍,但对于Mock测试的理解还是不够深刻,还是要在课后多下功夫。