p3c-gitbook/单元测试.md
<span style="color:orange">说明</span>:单元测试在线上运行时,感觉像空气(AIR)一样并不存在,但在测试质量的保障上,却是非常关键的。好的单元测试宏观上来说,具有自动化、独立性、可重复执行的特点。
<span style="color:orange">说明</span>:单元测试通常会被放到持续集成中,每次有代码check in时单元测试都会被执行。如果单测对外部环境(网络、服务、中间件等)有依赖,容易导致持续集成机制的不可用。 <span style="color:green">正例</span>:为了不受外界环境影响,要求设计代码时就把SUT的依赖改成注入,在测试时用spring 这样的DI框架注入一个本地(内存)实现或者Mock实现。 5. 【强制】对于单元测试,要保证测试粒度足够小,有助于精确定位问题。单测粒度至多是类级别,一般是方法级别。
<span style="color:orange">说明</span>:只有测试粒度小才能在出错时尽快定位到出错位置。单测不负责检查跨类或者跨系统的交互逻辑,那是集成测试的领域。 6. 【强制】核心业务、核心应用、核心模块的增量代码确保单元测试通过。
<span style="color:orange">说明</span>:新增代码及时补充单元测试,如果新增代码影响了原有单元测试,请及时修正。 7. 【强制】单元测试代码必须写在如下工程目录:src/test/java,不允许写在业务代码目录下。
<span style="color:orange">说明</span>:源码构建时会跳过此目录,而单元测试框架默认是扫描此目录。 8. 【推荐】单元测试的基本目标:语句覆盖率达到70%;核心模块的语句覆盖率和分支覆盖率都要达到100%
<span style="color:orange">说明</span>:在工程规约的应用分层中提到的DAO层,Manager层,可重用度高的Service,都应该进行单元测试。
9. 【推荐】编写单元测试代码遵守BCDE原则,以保证被测试模块的交付质量。
<span style="color:orange">说明</span>:多层条件语句建议使用卫语句、策略模式、状态模式等方式重构。 16. 【参考】不要对单元测试存在如下误解: