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

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

大淘宝用户平台技术团队单元测试建设

image.png作者:问元

image.png出品:大淘宝技术

 

 

单元测试是工程交付前质量保障的第一环,也无疑是软件工程质量保障的重要基石,有效的单元测试能够提前发现90%以上的代码Bug问题,同时也能防止代码的腐化,在工程重构演进时起到至关重要的作用。

 

为什么需要单元测试

 

纵观优秀的开源工程,完备的单元测试总是必须的条件。通过这些单元测试,我们可以充分了解代码中相关类和方法的作用和核心逻辑,熟悉各种场景的运行情况。同时也因为有了单元测试,开源作者在接受各种feature的代码提   交时才有稳定安全的保障。其实单元测试的重要性所有开发同学应该都了然于胸,同样TDD(测试驱动开发)也不是一个新的概念,但是真当我们落地实践时,又总会找出各种各样的理由来劝服自己下次一定好好写单元测试,这一次先放过自己。这些理由无外乎,开发周期太紧了; 测试同学能保证功能正确性;写单元测试代码量比业务代码还大; 又不是不能跑。所以虽然我们总是在追逐工程师文化,却又时不时放纵在放弃工程师底蕴的路上。

 

单元测试是工程交付前质量保障的第一环,也无疑是软件工程质量保障的重要基石,有效的单元测试能够提前发现90%以上的代码Bug问题,同时也能防止代码的腐化,在工程重构演进时起到至关重要的作用。

 

怎么写单元测试

好的单元测试的几个要点

 

摘自阿里巴巴开发规约

  1. 单元测试必须遵守AIR原则,单元测试必须具备Automatic(自动化),Independent(独立性),Repeatable(可 重复)性;
  2. 单元测试应该是全自动执行的,并且非交互式的。测试用例通常是被定期执行的,执行过程必须完全自动化才有意义。输出结果需要人工检查的测试不是一个好的单元测试;
  3. 单元测试要保证测试粒度足够小。单元测试测试粒度足够小,有助于精确定位问题。单测粒度至多是类级别, 一般是方法级别;
  4. 单元测试要遵守BCDE原则,Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等; Correct,正确的输入,并得到预期的结果;Design,与设计文档相结合,来编写单元测试;Error,强制错误

 

 

 

信息输入(如:非法数据、异常流程、非业务允许输入等),并得到预期的结果;

  1. 核心业务、核心应用、核心模块的增量代码要确保单元测试通过;

 

单元测试编码范式

 

这里主要以Mockito单元测试框架为模版

 

 

  1. Mock :

通过when().thenReturn/thenAnswer/thenThrow 或者doReturn().when()等mock方式将依赖类方法进行模拟,模拟服务依赖或者中间结果

  1. DO :

调用被测试类方法,执行测试链路

  1. Verify :

校验执行结果正确性,通过Assert校验数据结果准确,通过Verify校验链路执行准确,通过expected=Excep- tion.class校验异常链路

 

public class Test {
// 0. 依赖类@Mock
DependencyClass dependencyClass;
// 0. 待测试类@InjectMocks TestClass testClass;
@Before
public void setUp() { MockitoAnnotations.initMocks(this);
}
@Test
public void testMethod() {
// 1. Mock, 依赖方法,构造中间层数据when(dependencyClass.someMehod(any())).thenReturn(mockData());
// 2. Do, 调用被测试类
Result result = testClass.testMehod();
// 3. Verify, 校验结果数据
Assert.assertEquals("some expected result string", result.getModel());
}

 

 

当然写单元测试用例虽然套路比较模版化,但是我们也要充分利用单元测试框架(Junit/Mockito/Power- Mock/Spock),掌握其中的一些技巧,才能写出快准狠的单元测试用例,这也是研发同学必须要掌握的基本功。关于如何利用单元测试框架这里不再赘述(详细可以参考阿里技术《Java编程技巧之单元测试用例编写流程》)。

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


相关文章
|
2天前
|
敏捷开发 Java Devops
深入理解与应用软件测试中的Mock技术
【5月更文挑战第17天】 在现代软件开发过程中,单元测试是保证代码质量的重要手段。然而,对于依赖外部系统或服务的功能,如何有效进行单元测试一直是一大挑战。Mock技术的引入为这一难题提供了解决方案。本文将详细探讨Mock技术的概念、应用场景以及在实际软件测试中的优势和局限性,同时提供一些最佳实践和常见框架的使用指南。
|
4天前
|
数据挖掘 测试技术 网络安全
LabVIEW开发卫星测试平台
LabVIEW开发卫星测试平台
|
4天前
|
程序员 测试技术
程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。
【5月更文挑战第11天】程序员难以一次性写好代码并持续修复Bug,主要源于软件的高复杂性、需求不确定性、测试局限性和技术能力限制。复杂的系统易产生意外问题,需求变化导致初始设计难完备,测试无法覆盖所有情况,而技术更新和个体能力差异也会引入错误。因此,持续调试和优化是保证软件质量的关键步骤。
16 0
|
4天前
|
算法 物联网 5G
LabVIEW开发最小化5G系统测试平台
LabVIEW开发最小化5G系统测试平台
14 0
|
4天前
|
消息中间件 测试技术 Linux
linux实时操作系统xenomai x86平台基准测试(benchmark)
本文是关于Xenomai实时操作系统的基准测试,旨在评估其在低端x86平台上的性能。测试模仿了VxWorks的方法,关注CPU结构、指令集等因素对系统服务耗时的影响。测试项目包括信号量、互斥量、消息队列、任务切换等,通过比较操作前后的时戳来测量耗时,并排除中断和上下文切换的干扰。测试结果显示了各项操作的最小、平均和最大耗时,为程序优化提供参考。注意,所有数据基于特定硬件环境,测试用例使用Alchemy API编写。
39 0
linux实时操作系统xenomai x86平台基准测试(benchmark)
|
4天前
|
传感器 Linux 测试技术
xenomai 在X86平台下中断响应时间测试
该文讨论了实时操作系统中断响应时间的重要性,并介绍了x86中断机制和Xenomai的中断管理,包括硬件中断和虚拟中断的处理。Xenomai通过I-Pipe确保实时性,中断优先级高的Xenomai先处理中断。文中还提到了中断响应时间的测试设计,分别针对I-Pipe内核间虚拟中断和硬件中断进行了测试,并给出了在不同负载下的测试结果。
12 0
xenomai 在X86平台下中断响应时间测试
|
4天前
|
敏捷开发 JavaScript 测试技术
深入理解与应用软件测试中的Mock技术
【5月更文挑战第5天】 在现代软件开发过程中,单元测试作为保障代码质量的重要环节,其独立性和可靠性至关重要。Mock技术应运而生,为开发者提供了一种在隔离环境下模拟外部依赖的方法。本文将深入探讨Mock技术的概念、实现方式及其在软件测试中的应用,旨在帮助读者更好地理解和运用这一强大的测试工具,以提升测试效率和软件质量。
|
4天前
|
安全 IDE Java
Java串口通信技术探究2:RXTX库单例测试及应用
Java串口通信技术探究2:RXTX库单例测试及应用
29 4
|
4天前
|
Linux 测试技术 数据安全/隐私保护
CentOS安装MeterSphere并实现无公网IP远程访问本地测试平台
CentOS安装MeterSphere并实现无公网IP远程访问本地测试平台
|
4天前
|
数据采集 机器学习/深度学习 人工智能
自动化测试中AI辅助技术的应用与挑战
【4月更文挑战第30天】随着人工智能(AI)技术的飞速发展,其在软件自动化测试领域的应用日益增多。本文探讨了AI辅助技术在自动化测试中的应用情况,包括智能化测试用例生成、测试执行监控、缺陷预测及测试结果分析等方面。同时,文章还分析了在融合AI技术时所面临的挑战,如数据质量要求、模型的透明度与解释性问题以及技术整合成本等,并提出了相应的解决策略。

热门文章

最新文章