带你读《2022技术人的百宝黑皮书》——大淘宝用户平台技术团队单元测试建设(2)

简介: 带你读《2022技术人的百宝黑皮书》——大淘宝用户平台技术团队单元测试建设(2)

带你读《2022技术人的百宝黑皮书》——大淘宝用户平台技术团队单元测试建设(1)https://developer.aliyun.com/article/1338329?groupCode=taobaotech

单元测试编码提效

 

IDEA上有很多单元测试插件,能够半自动化生成单元测试类文件,这里重点推荐TestMe插件。TestMe插件可以   智能分析被测试类的依赖类,结合Mockito+Junit等单元测试框架,生成Mock/InjectMocks依赖关系,自动生成单 元测试类。

image.png

 

 


假设业务代码如下:

1

 

  1. @Component

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挂载的方式,在单元测试命令运行时执行代码覆盖率检测,计算单元测试 执行过程中所覆盖的代码比例来生成覆盖率。常见的覆盖率指标,又可进一步细分为语句覆盖率,条件覆盖率,分支覆盖率,路径覆盖率等。这里我们当前更为关注语句覆盖率和分支覆盖率,尤其是增量代码的覆盖率,更能体现变更代码的单元测试覆盖情况。

 

如何进行单元测试

 

image.png

这里我们借助于阿里研发平台Aone的测试实验室功能,Aone实验室支持测试任务插件的编排组合,通过独立的测 试资源执行测试任务。所以我们将代码拉取插件,单元测试插件和覆盖率计算插件进行编排配置,形成最终的执行流:拉取代码;执行单元测试命令;单元测试结果解析;计算覆盖率。最终完成整个工程的单元测试覆盖率计算。

 

 

 


单元测试覆盖率结果示例如下:

 image.png



带你读《2022技术人的百宝黑皮书》——大淘宝用户平台技术团队单元测试建设(3)https://developer.aliyun.com/article/1338325?groupCode=taobaotech

相关文章
|
4天前
|
测试技术
软件测试中的自动化测试技术应用
在当今快速发展的软件行业中,自动化测试技术正变得越来越重要。本文将探讨自动化测试技术在软件测试中的应用,包括其优势、常见工具及实施步骤。通过了解自动化测试技术的相关内容,读者可以更好地理解其在软件测试中的作用,提高测试效率和质量。
18 0
|
3天前
|
敏捷开发 Java 测试技术
探索软件测试中的模拟对象技术
【5月更文挑战第31天】本文将深入探讨模拟对象技术在软件测试中的应用,分析其如何提高测试效率和准确性。我们将通过具体案例,展示模拟对象技术如何简化复杂系统的测试流程,并讨论其在现代软件开发中的重要性。
|
6天前
|
供应链 物联网 测试技术
未来交织:新兴技术趋势与跨界应用探索深入理解与应用软件测试中的边界值分析法
【5月更文挑战第28天】 随着科技的迅猛发展,新兴技术正在重塑我们的世界。区块链技术提供了一种全新的数据安全和交易透明性解决方案;物联网(IoT)将日常物品转化为智能设备,优化了自动化和监控过程;虚拟现实(VR)则开启了沉浸式体验的大门。这些技术的发展趋势不仅指向自身领域的深化拓展,更预示着它们之间的交叉融合,共同构建一个智能化、互联的未来生态。本文将深入探讨这些新兴技术的发展动态,并分析其在多个行业中的潜在应用场景。
|
7天前
|
物联网 测试技术 持续交付
探索自动化测试在持续集成中的关键作用未来技术纵横谈:区块链、物联网与虚拟现实的融合革新
【5月更文挑战第27天】随着敏捷开发和持续集成(CI)的广泛采用,自动化测试已成为确保软件质量和快速交付的基石。本文将探讨自动化测试在持续集成流程中的核心地位,分析其如何提高测试效率、降低错误率,并支持快速的迭代开发。通过实例和数据支持,我们将深入理解自动化测试对于现代软件开发实践的重要性,并讨论实施自动化测试时面临的挑战及解决策略。
|
7天前
|
机器学习/深度学习 敏捷开发 测试技术
深入理解自动化测试:框架选择与实践挑战利用机器学习技术优化数据中心冷却系统
【5月更文挑战第27天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加快市场投放的关键步骤。本文深入探讨了自动化测试的框架选择问题,并剖析了实施过程中面临的挑战及其解决方案。通过比较不同测试框架的特点,我们旨在为读者提供一套明确的指导原则,帮助他们根据项目需求做出恰当的技术决策。同时,文中还分享了实际案例和最佳实践,以期帮助开发团队克服实施自动化测试时可能遇到的障碍。
|
8天前
|
机器学习/深度学习 数据采集 人工智能
探索软件测试中的AI辅助技术:未来趋势与挑战
【5月更文挑战第27天】 随着人工智能(AI)的迅速发展,其在软件测试领域的应用正逐步改变传统测试方法,提升测试效率和质量。本文将深入分析AI在软件测试中的应用现状,探讨其如何通过智能化的模式识别、预测分析和自适应学习机制优化测试流程。同时,文章还将讨论引入AI所面临的挑战,包括数据质量、模型泛化能力和解释性问题。最后,对未来AI辅助软件测试的潜在发展趋势进行展望。
|
14天前
|
机器学习/深度学习 人工智能 算法
探索软件测试中的AI辅助技术:未来趋势与挑战
【5月更文挑战第20天】 随着人工智能(AI)技术的飞速发展,其在软件测试领域的应用也日趋成熟。本文旨在深入探讨AI在软件测试中的角色,分析其带来的优势、面临的挑战以及未来的发展方向。通过实例分析,我们将揭示AI如何提高测试效率、优化测试流程并预测潜在缺陷,同时指出集成AI的测试工具和技术在实际工作中的应用情况,为软件测试工程师提供前瞻性的视角和实践指南。
|
17天前
|
敏捷开发 Java Devops
深入理解与应用软件测试中的Mock技术
【5月更文挑战第17天】 在现代软件开发过程中,单元测试是保证代码质量的重要手段。然而,对于依赖外部系统或服务的功能,如何有效进行单元测试一直是一大挑战。Mock技术的引入为这一难题提供了解决方案。本文将详细探讨Mock技术的概念、应用场景以及在实际软件测试中的优势和局限性,同时提供一些最佳实践和常见框架的使用指南。
|
19天前
|
数据挖掘 测试技术 网络安全
LabVIEW开发卫星测试平台
LabVIEW开发卫星测试平台
19 3
|
19天前
|
程序员 测试技术
程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。
【5月更文挑战第11天】程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。复杂的系统易产生意外问题,需求变化导致初始设计难完备,测试无法覆盖所有情况,而技术更新和个体能力差异也会引入错误。因此,持续调试和优化是保证软件质量的关键步骤。
23 0