带你读《2022技术人的百宝黑皮书》——大淘宝用户平台技术团队单元测试建设(1)https://developer.aliyun.com/article/1338329?groupCode=taobaotech
单元测试编码提效
IDEA上有很多单元测试插件,能够半自动化生成单元测试类文件,这里重点推荐TestMe插件。TestMe插件可以 智能分析被测试类的依赖类,结合Mockito+Junit等单元测试框架,生成Mock/InjectMocks依赖关系,自动生成单 元测试类。
假设业务代码如下:
1 |
|
|
2 |
public class DefaultMemberManager implements MemberManager { |
|
3 |
@Autowired | |
4 |
|
private MemberDAO memberDAO; |
5 |
|
@Autowired |
6 |
|
private CacheManager cacheManager; |
7 |
|
|
8 |
|
@Override |
9 |
|
public Date queryActivationTime(long userId) { |
10 |
|
Date activationTime = cacheManager.getActivationTime(userId); |
11 |
|
if (activationTime == null) { |
12 |
|
MemberDO memberDO = memberDAO.queryByUserId(userId); |
13 |
|
if (memberDO != null) { |
14 |
|
cacheManager.saveActivationTime(userId, memberDO.getActiveTime()); |
15 |
|
activationTime = memberDO.getActiveTime(); |
16 |
|
} |
17 |
|
} |
18 |
|
return activationTime; |
19 |
|
} |
20 |
} |
|
则通过TestMe快捷键COMMOND+N, 可以极速自动生成如下的单元测试类
public class DefaultMemberManagerTest { @Mock MemberDAO memberDAO; @Mock CacheManager cacheManager; @InjectMocks DefaultMemberManager defaultMemberManager; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void testQueryActivationTime() throws Exception { when(memberDAO.queryByUserId(anyLong())).thenReturn(null); when(cacheManager.getActivationTime(anyLong())).thenReturn( new GregorianCalendar(2022, Calendar.MARCH, 5, 23, 2).getTime()); Date result = defaultMemberManager.queryActivationTime(0L); Assert.assertEquals(new GregorianCalendar(2022, Calendar.MARCH, 5, 23, 2).getTime(), result); ) )
团队单元测试建设
覆盖率概念
覆盖率是类JaCoCo插件通过javaagent挂载的方式,在单元测试命令运行时执行代码覆盖率检测,计算单元测试 执行过程中所覆盖的代码比例来生成覆盖率。常见的覆盖率指标,又可进一步细分为语句覆盖率,条件覆盖率,分支覆盖率,路径覆盖率等。这里我们当前更为关注语句覆盖率和分支覆盖率,尤其是增量代码的覆盖率,更能体现变更代码的单元测试覆盖情况。
如何进行单元测试
这里我们借助于阿里研发平台Aone的测试实验室功能,Aone实验室支持测试任务插件的编排组合,通过独立的测 试资源执行测试任务。所以我们将代码拉取插件,单元测试插件和覆盖率计算插件进行编排配置,形成最终的执行流:拉取代码;执行单元测试命令;单元测试结果解析;计算覆盖率。最终完成整个工程的单元测试覆盖率计算。
单元测试覆盖率结果示例如下:
带你读《2022技术人的百宝黑皮书》——大淘宝用户平台技术团队单元测试建设(3)https://developer.aliyun.com/article/1338325?groupCode=taobaotech