单元测试探索
date
Dec 4, 2017
slug
单元测试探索
status
Published
tags
自动化测试
Java
summary
type
Post
自动化测试
自动化测试金字塔,也称为自动化分层测试,这里仅仅列举了每个层次的百分比,实际要根据团队的方向来做调整:
- Unit:70%,大部分自动化实现,用于验证一个单独函数或独立功能模块的代码;
- Service:20%,涉及两个或两个以上,甚至更多模块之间交互的集成测试;
- UI:10%,覆盖三个或以上的功能模块,真实用户场景和数据的验收测试; Unit是整个金字塔的基石。 最重要特点是运行速度非常快; 第二个重要特点是UT应覆盖代码库的大部分,能够确定一旦UT通过后,应用程序就能正常工作。
自动化单元测试原则
提交代码、运行测试的重点是什么?快速捕获那些因修改向系统中引入的最常见错误,并通知开发人员,以便他们能快速修复他们。
提交阶段提供反馈的价值在于,对它的投入可以让系统高效且更快地工作。
- Level1:正常流程可用,即一个函数在输入正确的参数时,会有正确的输出
- Level2:异常流程可抛出逻辑异常,即输入参数有误时,不能抛出系统异常,而是用自己定义的逻辑异常通知上层调用代码其错误之处
- Level3:极端情况和边界数据可用,对输入参数的边界情况也要单独测试,确保输出是正确有效的
- Level4:所有分支、循环的逻辑走通,不能有任何流程是测试不到的
- Level5:输出数据的所有字段验证,对有复杂数据结构的输出,确保每个字段都是正确的
一般只做到Level2,重要系统或者底层服务,要做到Level3或Level4。而很少做到Level5。即便如此,就已经实现了如上所说的,很难被测试工程师发现bug。
单元测试的好处
可以提前释放压力、风险、暴露问题等多个方面,改变以往没有单元测试,所有问题都集中到最后爆发的弊端。
单元测试技术栈
- springtest + junit4 + JMockit
- spring启动要初始化很多bean,加载较慢,优化方向:springBoot
- 使用Spring测试套件,Spring容器只会初始化一次!
- 使用JMockit,让目标方法按你定义的规则生成模拟数据
- 使用H2数据库,让单元测试环境独立,不影响其他环境