目录
单元测试
指对软件中的最小可测试单元进行检查和验证,对于面向对象编程,最小单元就是方法,包括基类(超类)/抽象类/派生类(子类)中的方法
合格的单元测试
1.测试的是一个代码单元内部的逻辑,而不是各模块之间的交互
2.独立,不需要外部环境即可测试代码,可以随时随地执行
3.要高效,可快速执行
4.要可回归,可以重复执行
单测干什么
1.可更好地保证代码符合预期行为
2.单元测试让我们更早得到反馈,提前发现问题
3.单元测试是重构的基础,验证重构是否可靠
4.应用于持续继承流程,对每次代码提交做回归测试
5.对程序结构要求更高,会让程序的结构更合理
6.编写易测试的代码需要更高的设计水平,会提高程序员的代码设计能力
单测编写规范
1.测试类命名
测试类应该放在src/test/java目录下,与源码目录隔离,测试类包名最好与源码相对应,创建测试类名需在源码类后加上后缀Test或TestCase,一般选择前者,
eg:源文件TSettleAdminServiceImpl.java,测试类TSettleAdminServiceImplTest.java,注意,新建测试文件,右键类名-->Generate-->Test-->选择方法
2.测试方法命名
每个测试方法都要在源文件方法的基础上,加前缀test,eg,源文件方法名称inquireMerchantTheNewestSettlePeriodBatch,测试方法名称testInquireMerchantByCustomerAndSettlePeriod
3.测试资源
测试资源文件都需要存放在src/test/resources目录下,配置文件独立配置一套作为测试所用,和源码资源文件隔离开,最好不要引用源资源文件
单测覆盖粒度
1.通用的业务组件或工具类
2.内外部接口
3.包含重要逻辑的service
4.不包括自动生成的代码部分
单测执行策略
1.项目排期一定要预留单测时间
估计开发工作量使,应该结合自身的能力并留出单元测试的时间,eg,纯开发工作的人天为N,加上UT则至少需要2N时间
2.尽早进行单元测试,边写功能,边写测试
3.周期性对代码进行评审,不断补充需要进行单测的代码
4.对于新增加的功能和修改的功能要进行完善单元测试
5.对于新发现的bug,也应增加相应的单元测试
如何写好单元测试
1.趁早:时机-接入越早越好
根据UT开始时间来分:测试驱动开发TDD,边测试边开发,开发完再测试,对UT比较熟悉的人员建议采用TDD:
面向测试的设计可以更好地分离关注点;测试越早越能尽早发现缺陷;可以把自己作为使用者二非仅仅是实现者,可改善接口
2.覆盖:单测的内容-场景考虑要全面
验证接口的入参和结果;验证程序边界条件;验证程序异常情况;验证程序执行路径
3.独立:目标与环境的隔离-体轻跑得快
可通过Mock实现测试目标与环境的隔离