自动化测试高手课
柳胜
原甲骨文高级开发经理
16849 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 34 讲
开篇词 (1讲)
自动化测试高手课
15
15
1.0x
00:00/00:00
登录|注册

10|单元测试(一):原来测试可以这么高效

你好,我是柳胜。
提到单元测试,你可能第一反应是,这个不是归开发做么?作为测试的你,为什么不但要懂 UI、接口测试,还要了解单元测试呢?学完今天的内容,你会有自己的答案。
先从一个常见的业务场景说起,开发同学在实现 Order 服务的时候,需要代码化一些业务逻辑。比如处理一个订单,要计算总价、优惠扣减、库存查验等等。
现在 Order 服务的开发想要测试自己写的这些代码是否预期运转,他最先想到的办法可能是,把 Order 服务构建完运行起来,向它发送 HTTP Request “POST /api/v1/orders”, 然后检查返回的 Response 内容,看是不是订单已经如期生成。
这个方法当然也能达到测试目标,但是你已经学习过了 3KU 原则,就可以问开发人员一个问题 “同样的验证目标,能不能在 ROI 更高的单元测试阶段实现?”
你看,测试人员和开发人员的单元测试工作联系起来了,它们之前在实践中一直是不太交流的两个领域,现在需要相互配合,服务于测试的整体目标。
这一讲会用一个 FoodCome 系统里的一个 Order 服务的代码作为例子,帮你捋清楚单元测试能做什么,怎么做。

制定单元测试策略

我们先来看一下 Order 服务的内部结构,我画了一张 Class 关系图来展现内部的逻辑结构。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

单元测试策略对于软件开发至关重要。本文以实际业务场景为例,深入探讨了单元测试的重要性及制定策略。首先介绍了单元测试的概念,并通过Order服务的案例展示了具体实施过程。在制定单元测试策略时,强调了需要考虑编写多少个Test Class以及选择孤立型或社交型测试方式。随后详细介绍了OrderService的单元测试过程,包括编写测试代码以及单元测试相对于UI和接口测试的优势。通过本文,读者可以了解单元测试的重要性,以及如何在实际项目中进行有效的单元测试,从而提高代码质量和开发效率。文章还提到了单元测试的ROI高、速度快,但在实际中测试人员对此领域相对陌生。因此,文章承诺将继续探讨如何推动单元测试的“可测试性”。整体而言,本文为读者提供了深入了解单元测试策略的机会,以及如何将其应用于实际项目中的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《自动化测试高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • 太匆匆
    Oh Yeah,有多少开发人员愿意做单元测试,又有多少项目经理允许开发人员有时间去做单元测试

    作者回复: 领域逻辑复杂而重的软件产品,一定要做好单元测试,目标是明确的。怎么推动,可以灵活一点,尊重人性的认知过程,比如,你可以把老大重视的bug和开发团队过一遍,讨论一下这些bug能够最早发现的阶段,获得共识后,找小一块单元测试的试验田,获得实践后,推广到更大范围。

    2022-04-11
    8
  • swordman
    @DataProvider public static Object[][] FinalPrice() { return new Object[][]{ {1111, 2222, "佛跳墙", 200, -20, 180}, {1112, 2223, "珍珠翡翠白玉汤", 100, -10, 90} }; } @DataProvider("FinalPrice") @Test public void shouldFinalPrice(FinalPrice finalPrice) { int price = orderService.determineFinalPrice(finalPrice); //验证order是否在数据库里创建成功 verify(比较price和finalPrice的最后一个常量是否相等); }

    作者回复: 👍 正确又干净!

    2022-04-11
    4
    8
  • Sarah
    在项目中一直在实践单元测试和UI自动化测试结合的方式让整个自动化测试更高效,单元测试覆盖细粒度的功能单元,UI自动化来达到串起整个用户流程的验证

    作者回复: 希望能看到你更多的分享!

    2022-04-19
    2
  • 胡小天
    OrderService的单元测试应该是需要拉起整个项目才能进行测吧,本地跑没办法加载Spring注解和配置文档,还是有其他的办法?

    作者回复: 单元测试是动态测试。怎么动起来呢,有两种思路,第一种思路,Spring应用本身就是注解驱动的,先启动应用,再启动单元测试。另外一种思路呢,通过单元测试,来驱动被测单元,比如算法,Utility等。

    2022-05-22
    1
  • On
    单元测试是必须得做的,虽然实际情况是迫于交付进度的压力或者开发的不良习惯等等原因,单元测试不做或者做不到位,给测试和项目质量埋下缺陷的隐患。这里想到另一个问题:单元测试和tdd到底有什么区别?是不是后者更彻底、更能保证开发的代码的质量!?谢谢。

    作者回复: TDD是Test Drive Development,是方法论,单元测试是TDD的实现基础。TDD一般指的是先设计测试案例,再开发代码,所以叫做测试驱动开发。 非常理解您的工作实际,单元测试必须要推动,但是从哪个地方入手,范围多大,可以讲点策略,灵活一点。

    2022-05-08
    1
  • lisa
    领域知识泄漏存在的很大原因是在运行某个测试之前,输入是在这次测试时才确定,所以我们在写测试用例的时候并知道输出是什么,所以就没办法一开始确定。
    2023-02-20归属地:广东
    1
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部