单测 - 需要知道的点

1、好的单元测试必须遵守AIR原则。

说明:单元测试在线上运行时,感觉像空气(AIR) —样并不存在,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。

A: Automatic(自动化):

  • 不需要人为手动检查通过结果

l:lndependent(独立性)

  • 单测中使用的数据不应该依赖于运行环境,所需的数据应该是测试用例的一部分
  • 单测中调用实际的方法
  • 一个测试方法应该只有一个逻辑断言,一个逻辑断言中可以有多个物理断言
  • 不在数据准备、准备过程中进行判断,但可以抛异常
  • 单测之间在运行时不相互依赖
  • 在测试方法中,断言语句后不做其他动作

R:Repeatable(可重复)

  • 任何时间任何环境下重复运行测例,得到的结果应该相同,不依赖于随机函数、时间日期等
  • 每个测例应该装载它自己的数据,当一组测试需要共同数据时可以考虑使用数据辅助类以提高复用性

2、 编写单元测试代码应该遵守BCDE原则,以保证被测试模块的交付质量

  • Border: 边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等

  • Correct: 正确的输入,并得到预期的结果

  • Desgin: 与设计文档相结合,来编写单元测试

  • Error: 强制错误信息输入(如:非法数据、异常流程、非业务允许输入等),并得到预期结果

3、单元测试应该是全自动执行的,并且非交互式的。测试框架通常是定期执行的,执行过程必须完全自动化才有意义。输出结果需要人工检查的测试不是一个好的单元测试。单元测试中不准使用sout来进行人肉验证,必须使用assert 来验证

4、保持单元测试的独立性。为了保证单元测试稳定可靠且便于维护,单元测试用例之间决不能互相调用,也不能依赖执行的先后次序。

反例:method2需要依赖method 1的执行,将执行结果做为method2的输入。

5、单元测试是可以重复执行的,不能受到外界环境的影响。

说明:单元测试通常会被放到持续集成中,每次有代码check in时单元测试都会被执行。如果单测对外部环境(网络、服务、中间件等)有依赖,容易导致持续集成机制的不可用。

6、对于单元测试,要保证测试粒度足够小,有助于精确定位问题。单测粒度至多是类级别,一般是方法级别。

说明:只有测试粒度小才能在出错时尽快定位到出错位置。单测不负责检查跨类或者跨系统的交互逻辑,那是集成测试的领域。

7、核心业务、核心应用、核心模块的增量代码确保单元测试通过。

说明:新增代码及时补充单元测试,如果新增代码影响了原有单元测试,请及时修正。

8、单元测试代码必须写在如下工程目录:src/test/java,不允许写在业务代码目录下。

说明:源码构建时会跳过此目录,而单元测试框架默认是扫描此目录。

9、 核心业务、核心应用、核心模块的增量代码确保单元测试通过;新增代码及时补充单元测试,如果新增代码影响了原有单元测试,及时修正

10、 对于不可测试的代码建议做必要的重构,使代码变得可测,避免为了达到测试要求而书写不规范的测试代码

 

参考于多篇文章.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值