一、单元测试要求
通过单元测试在设计、编写代码阶段,验证我们的设计及代码实现是否符合需求,满足既定业务规则,及时发现问题、解决问题,提高代码质量,提高项目的迭代速度,提升小组的开发效能,具体有以下目标:
1)、新立项项目有单元测试案例的分析设计产出到需求细分,参见模板;
2)、新立项新工程代码上有test目录,下面有domain层下对应的目录的单元测试类,要求一个模型对应要给类;
3)、新立项项目提交st前单元测试均要对照1)做过检视,并且能跑通;
4)、流水线管理中需要对有单元测试的开启单元测试,跑通流水线能看到测试报告;
二、单元测试分析
1、精益专题故事
精益模式下的开发时间变化,项目需求分析设计工作前置,对需求澄清会的需求故事进行认真确认及时提出问题,涉及的角色主要有:BA 、 开发人员
1)、在需求澄清会前,BA与 开发人员明确需求范围,对故事细节及是否需要单元测试达成一致;
2)、在需求澄清会中,BA与业务方对业务验收标准进行确认;
3)、在需求澄清会后,BA与 开发人员根据已确认验收标准,根据情况适当增加系统面的单元测试;
2、实施策略方法论
对于单元测试范围的实时策略按着“四象限”法则进行评定,具体细则有:
1)、对现有技术债较高的功能改造、重构,需整理具体的业务模型,按“四象限”法则进行评定确定实施单元测试的范围;
2)、对新增的功能测单元测试需要组织项目经理、产品负责人一起,结合“四象限”法则进行评定;
三、单元测试开发
1、功能设计要求
组内项目程序设计注重结构化的设计评审,推行DDD&TDD分析设计方法,具体细则有:
1)、对新增的较简单的故事,需在分析设计阶段产出领域模型层设计文档,以Visio图方式交付;
2)、对重要领域模型设计单元测试案例,更新到需求细分中,以Excel交付方式;
3)、根据单元测试的设计进行领域模型、服务、资源层代码编写,以代码方式交付;
2、开发模式变化
以测试驱动开发TDD为原则,先编写单元测试用例代码,后编写业务功能代码,逐步测试通过所有的测试用例,达到业务功能的开发完成,具体要求:
1)、当工程创建完成,先在Test目录下编写单元测试案例,包括编写和模型对应的单元测试类以及测试案例的方法;
2)、根据测试案例不断迭代模型的行为及方法,要求迭代的代码行功能完整尽可能少,保持边写代码边跑单元测试UT;
3)、对于需要被隔离的代码如果确实需要依赖其他模型,可通过使用模拟对象(MOCK)实现隔离;
3、常见开发场景单元测试编写规范
1)、领域模型开发
1.1、需要对实体、值对象、聚合进行单元测试案例编写,要求纯业务逻辑测试,不能连接数据库及外部接口调用;
1.2、单元测试方法命名格式:give中文描述_when中文描述_then中文描述;
1.3、单元测试方法体编写需按give_when_then三段进行编写,需要注释出来;
1.4、对于数据准备需要放到@Before中,可以根据需要Mock或者Spy对象;
2)、应用服务开发
包含领域服务、应用服务的开发,需要进行集成测试,建议配置H2内存数据库进行;
3)、UI交互层开发
前台交互建议做契约测试;
四、单元测试评审
1、检视规范
在项目管理过程中新增单元测试检视环节,将单元测试评审纳入代码检视过程中,具体细则有:
1)、代码检视阶段新增单元测试检视环节,在检视规则中新增单元测试案例登记要求,具体登记地址详见: [每日代码检视跟进]
2)、代码检视流程优化,按功能设计检视-》单元测试案例检视-》跑通单元测试-》具体功能实现检视,四个步骤进行;
五、单元测试验收
1、流水发布报告验收
通过流水线跑通中“sonar静态代码扫描”tab页的测试报告进行验收,具体流水线及项目POM文件操作如下:
1)、Devops流水线中配置单元测试及覆盖率报告
在流水线的“Sonar静态代码扫描”步骤中,添加“单元测试”和“单元测试覆盖率”
需要看到单元测试数量还需自定义参数sonar.tests=src/test
2)、在pom文件内配置如下内容
<pre style="margin: 0px; tab-size: 4; white-space: pre-wrap;"> <!-- 生成单元测试覆盖率报告的插件 -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.1</version>
<executions>
<execution>
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>default-report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin></pre>
3)、跑完流水线得到报告
参考资料:
1、[单元测试和自动化测试](
2、[编写单元测试与流水线添加单元测试]
网友评论