单元测试的规范
- 格式:pdf
- 大小:220.62 KB
- 文档页数:3
单元测试的规范⼀、测试准则
必须满⾜AIR原则
A:Automatic(⾃动化)
I:Independent(独⽴性)
R:Repeatable(可重复)
可参照27条准则。
引⽤链接:
原⽂链接:如下:
27条准则⼆、结构规范
⽬录结构规范:
1.源码存放在src⽬录,每个功能模块创建单个npm包
2.src同级创建test/unit作为单元测试⽂件⽬录
3.test/unit⽬录下创建源npm包同名⽂件夹,⽤于存放单元测试⽂件
4.src同级创建test/integration作为集成测试⽂件夹
5.test/integration⽬录下创建源npm包同名⽂件夹,⽤于存放集成测试⽂件
⽂件命名规范:
1.test⽬录下测试⽂件名同源码⽂件名同名,后缀以.test.js结尾
2.test/unit和test/integration创建测试⽂件夹时,参照短横线(kabab-case)规范命名。
3.js和ts⽂件依照短横线(kabab-case)规范命名,Vue⽂件依照驼峰(camelCased)规范命名。
4.每个源码⽂件(如js,ts,vue)对应⼀个同名.test.js⽂件。(index⽂件可以忽略)三、编码原则
必须符合 BCDE 原则:
B:Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。
C:Correct,正确的输⼊,并得到预期的结果。
D:Design,与设计⽂档相结合,来编写单元测试。
E:Error,强制错误信息输⼊(如:⾮法数据、异常流程、⾮业务允许输⼊等),并得到预期的结果。
避免以下情况:
1)构造⽅法中做的事情过多。
2)存在过多的全局变量和静态⽅法。
3)存在过多的外部依赖。
4)存在过多的条件语句。
建议:
1.涉及到的某些扩展模块可以使⽤mock模拟
2.测试⽤例不要使⽤@ignored或者被注释掉,切记切记。如何编写更好的单元测试
原⽂链接:
单元测试在最近的⼯作中使⽤⽐较⼴泛,我已经收集了⼀些关于如何编写更好的测试类的准则,并且我已经尝试着坚持这些准则多年了。记住,编写糟糕的测试是在浪费时间,并会在以后造成更⼤的问题。所以最好把这些准则记在⼼⾥。
19条建议
四、编码规范:
1.test对应每个源码创建单元测试包
2.每个npm包,都要添加descript,描述名为npm包名。
如descript("awp-lib-moment",()=>{});
3.需⽣成快照⽂件的单元测试,快照需要每次提交。
4.expect test('') 中描述的是调⽤和期望输出结果。
如test("Moment.format('yyyyMMdd HH:mm:ss','2019/07/09 17:41:01') 期望输出结果:20190709 17:41:01", () => {});
5.进⾏参数或属性校验。
校验包含正向和反向校验,即正确类型正确输出和异常类型返回异常信息等。
校验种类包含,参数个数、参数类型等。
6.测试要覆盖实现中的代码的各个分⽀
7.⼀个测试⽅法只测试⼀个⽅法,不测试私有⽅法
8.⼀个测试类只对应⼀个被测类.
9.测试⽤例的变量和⽅法都要有明确的含义
五、测试维度
编写单元测试,主要参考以下⼏个⽅⾯:来源链接:
1.接⼝功能性测试
接⼝功能的正确性,即保证接⼝能够被正常调⽤,并输出有效数据!------------------> 是否被顺利调⽤
------------------> 参数是否符合预期
2.局部数据结构测试
保证数据结构的正确性------------------> 变量是否有初始值或在某场景下是否有默认值
------------------> 变量是否溢出3.边界条件测试
------------------> 变量⽆赋值(null)
------------------> 变量是数值或字符
------------------> 主要边界:最⼤值,最⼩值,⽆穷⼤
------------------> 溢出边界:在边界外⾯取值+/-1
------------------> 临近边界:在边界值之内取值+/-1
------------------> 字符串的边界,引⽤ "变量字符"的边界
------------------> 字符串的设置,空字符串
------------------> 字符串的应⽤长度测试
------------------> 空⽩集合
------------------> ⽬标集合的类型和应⽤边界
------------------> 集合的次序
------------------> 变量是规律的,测试⽆穷⼤的极限,⽆穷⼩的极限
4.所有独⽴代码测试
保证每⼀句代码,所有分⽀都测试完成,主要包括代码覆盖率,异常处理通路测试------------------> 语句覆盖率:每个语句都执⾏到了
------------------> 判定覆盖率:每个分⽀都执⾏到了
------------------> 条件覆盖率:每个条件都返回布尔
------------------> 路径覆盖率:每个路径都覆盖到了
5.异常模块测试
后续处理模块测试:是否包闭当前异常或者对异常形成消化,是否影响结果!
六、测试⽬标说明:以下仅作为参考,实际还需要按照各⾃项⽬进⾏评估。语句覆盖率:>=70% 分⽀覆盖率:100% 函数覆盖率:100% ⾏覆盖率: >=80%
执⾏覆盖率, 业界标准通常在 80% 左右!!