带你读《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


相关文章
|
1月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
51 4
|
2月前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
3月前
|
安全 测试技术
北大李戈团队提出大模型单测生成新方法,显著提升代码测试覆盖率
【10月更文挑战第1天】北京大学李戈教授团队提出了一种名为“统一生成测试”的创新方法,有效提升了大模型如GPT-2和GPT-3在单一测试中的代码生成覆盖率,分别从56%提升至72%和从61%提升至78%。这种方法结合了模糊测试、变异测试和生成对抗网络等多种技术,克服了传统测试方法的局限性,在大模型测试领域实现了重要突破,有助于提高系统的可靠性和安全性。然而,该方法的实现复杂度较高且实际应用效果仍需进一步验证。论文可从此链接下载:【https://drive.weixin.qq.com/s?k=ACAAewd0AA48Z2kXrJ】
88 1
|
4月前
|
人工智能 测试技术 开发者
北大李戈团队提出大模型单测生成新方法,显著提升代码测试覆盖率
【9月更文挑战第27天】北京大学李戈团队在人工智能领域取得重要突破,提出HITS新方法,通过将待测方法分解为多个切片并利用大型语言模型逐个生成测试用例,显著提升代码测试覆盖率,尤其在处理复杂方法时效果显著,为软件开发和测试领域带来新希望。尽管存在一定局限性,HITS仍展示了巨大潜力,未来有望克服限制,推动软件测试领域的创新发展。论文详情见【https://www.arxiv.org/pdf/2408.11324】。
159 6
|
20天前
|
数据采集 人工智能 自动驾驶
VSI-Bench:李飞飞谢赛宁团队推出视觉空间智能基准测试集,旨在评估多模态大语言模型在空间认知和理解方面的能力
VSI-Bench是由李飞飞和谢赛宁团队推出的视觉空间智能基准测试集,旨在评估多模态大型语言模型(MLLMs)在空间认知和理解方面的能力。该基准测试集包含超过5000个问题-答案对,覆盖近290个真实室内场景视频,涉及多种环境,能够系统地测试和提高MLLMs在视觉空间智能方面的表现。
62 16
VSI-Bench:李飞飞谢赛宁团队推出视觉空间智能基准测试集,旨在评估多模态大语言模型在空间认知和理解方面的能力
|
5天前
|
消息中间件 监控 小程序
电竞陪玩系统架构优化设计,陪玩app如何提升系统稳定性,陪玩小程序平台的测试与监控
电竞陪玩系统架构涵盖前端(React/Vue)、后端(Spring Boot/php)、数据库(MySQL/MongoDB)、实时通信(WebSocket)及其他组件(Redis、RabbitMQ、Nginx)。通过模块化设计、微服务架构和云计算技术优化,提升系统性能与可靠性。同时,加强全面测试、实时监控及故障管理,确保系统稳定运行。
|
27天前
|
测试技术 API 数据库
淘宝商品详情高级版 (item_get_pro)API如何测试
要测试淘宝商品详情高级版API(item_get_pro),需先阅读API文档,注册开放平台账号,创建应用获取密钥,搭建测试环境,选择测试工具。测试时设计用例,配置工具,发送请求,验证响应,记录日志。注意安全和数据格式。
|
2月前
|
人工智能 供应链 安全
AI辅助安全测试案例某电商-供应链平台平台安全漏洞
【11月更文挑战第13天】该案例介绍了一家电商供应链平台如何利用AI技术进行全面的安全测试,包括网络、应用和数据安全层面,发现了多个潜在漏洞,并采取了有效的修复措施,提升了平台的整体安全性。
|
3月前
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
184 32
|
2月前
|
数据采集 前端开发 安全
前端测试技术
前端测试是确保前端应用程序质量和性能的重要环节,涵盖了多种技术和方法