单元测试是否模拟?

发布于:2024-10-24 编辑:匿名 来源:网络

前言 前段时间,我们团队就单元测试是否使用Mock进行了讨论,大家都有自己的看法。这篇文章给出了我对单元测试 Mock 与否的看法。

欢迎各位同仁提出不同意见,互相讨论、交流。单元测试没必要吗?我见过很多不写单元测试的项目。

给出的理由大多是:“没有必要”、“浪费时间”、“无法获得单体测试的作用”。此类项目要么是小型项目,要么是大铁项目。

我之前也有同样的观点...单元测试在软件开发过程中还是非常重要的。除了提高代码质量之外,引入CI/CD后的自动化测试流程可以起到快速部署和交付的作用。

每次上线都需要“一点一点”测试吗?我想凡是有过这种经历的人都深有体会。模拟还是不模拟?那么什么是模拟呢?什么是模拟?简单来说,Mock是在实际测试过程中模拟目标代码的行为并替换真实的调用目标。

这样做有什么意义,如下图所示? Mock 的意义是什么?试想一下,如果单元测试时出现以下问题该怎么办?单元测试产生的涉及DB操作、网络调用等的数据算垃圾数据吗?会影响生意吗?生产环境发布/部署过程中,单元测试执行错误导致生产问题怎么办?如果CI流程中的测试阶段时间太长怎么办?会影响整合交付吗?我想大多数开发者都经历过上述问题,那么如何避免这些问题呢?我认为 Mock 是最好的方法。如果将涉及到的外部操作,比如DB操作、网络调用等行为进行mock,就不会出现垃圾数据的问题,也不用担心环境切换带来的问题。

还可以模拟外部耗时操作来避免 CI。过程太长了。

个人认为Mock只是模拟调用外部设备的行为,并不影响代码逻辑。因此,不存在“Mock是否是有效的单元测试”这样的问题。

怎么嘲讽?什么应该被嘲笑?通常,我们编写的方法(或函数)是由很多方法分层组成的。就像这样,当我们对顶层方法进行单元测试时,哪些方法应该被mock?如果Mock方法1、2、3,那么方法4、5、6就不会被调用,里面的逻辑也不会被覆盖,也就是说它不是一个有效的单元测试。

如果修改Mock方法4、5、6的逻辑或者返回值,那么就必须递归向上修改,这是不符合软件工程的。但是,如果方法43、5、6都涉及DB或网络调用等外部不可控操作,我们应该Mock它们。

因此,一些稳定且不可控的方法应该被嘲笑。Mock编写示例以Python中的Mock框架为例。

示例如下: 代码语言:python 代码运行次数:0 复制 Cloud Studio 代码运行 class TestXxService(unittest.TestCase): def test_init(self): XXService.update(xx )class XXService: def update(xx): ....test_init函数中的update会涉及到数据库操作。这里,patch 用于模拟这两个函数的行为。

代码语言:python 代码运行次数:0 复制Cloud Studio代码运行 #patch("目标函数路径")patch('....update') 模拟的情况下,XXService.update会被模拟的函数替换执行代码语言:python 代码运行次数:0 复制Cloud Studio代码运行 def test_init(self): with patch('....update') as mocked_update: # 调用业务逻辑函数 XXService.update(xx)在模拟上下文中,mocked_update.assert_used_once_with(xx),其中,assert_used_once_with将验证模拟函数是否被调用过一次,并将验证预期接收的参数是否匹配。如果没有参数,则使用assert_used_once来验证是否被调用过一次。

如果模拟的函数实际上被调用了多次,则需要按照以下方式进行编码: python code run times: 0 Copy Cloud Studio code run # 断言mocked_update被调用了2次 self.assertEqual(mocked_update.call_count, 2) # 断言调用mocked_update,参数正确mocked_update.assert_any_call(xx) 如果函数有返回值,定义mock函数时,添加return_value,return_value可以是任意类型。代码语言:python 代码运行次数:0 复制 Cloud Studio 代码在验证返回值时按照以下方式运行 patch('...update', return_value='xxx') as mocked_update 代码语言:python 代码运行次数:0 复制Cloud Studio代码运行 xxxx = mocked_update.return_valueself.assertEqual(xxxx, 'xxx') 通过示例,我们模拟了XXService.update行为,实现了XXService的隔离测试,保证了测试的可靠性和高效性。

总结一下,在单元测试中使用 Mock 有以下好处: 隔离测试:Mock 可以让测试专注于测试的代码逻辑,而不必担心外部的不稳定因素。提高测试速度:模拟可以通过避免耗时的外部调用来加快测试速度。

提高测试的可靠性和稳定性:Mock可以避免外部变化对测试结果的影响。

单元测试是否模拟?

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 场景实验室获得IDG资本数千万元A+轮融资,吴声对未来新物种做出10个预测

    场景实验室获得IDG资本数千万元A+轮融资,吴声对未来新物种做出10个预测

    据投资界8月6日消息,情景实验室创始人吴声在《新物种爆炸吴声场景课堂》召开新闻发布会,宣布已完成1000万元A+ IDG资本投资的A轮融资。 此前,其于今年12月完成由盛景网联领投的万元A轮融资。 5月  ,吴声推出“新物种实验计划”。 该计划是由情景实验室、洛可可设计集团

    06-18

  • 一姚网母公司111集团发布2019年Q1财报:净利润同比增长98.5%

    一姚网母公司111集团发布2019年Q1财报:净利润同比增长98.5%

    投资界消息5月16日,该集团(纳斯达克股票代码:YI)发布截至 3 月 31 日第一季度业绩。 一季度,集团实现净利润6.56亿元,同比增长98.5%。 非 GAAP 亏损继续收窄,较上季度下降 12.7%。 年底覆盖23万家药店。 据了解,截至3月31日,该公司已为超过17万家药店提供服务。 B2B业

    06-18

  • 国美电器股东大会通过了8项议案,黄光裕姐姐等人退出董事会

    国美电器股东大会通过了8项议案,黄光裕姐姐等人退出董事会

    国美6月10日下午召开股东大会,董事会成员改选、董事会授权发行新股等8项议案全部获得通过。 投票结束后,现任总裁王俊洲、副总裁魏秋立和黄光裕妹妹黄燕虹将正式退出董事会,成员人数将从13人减少至11人。   国美电器召开年度股东大会下午,表决通过了连任董事邹晓春、张大

    06-18

  • 社区生鲜摊位项目好菜摊完成500万元种子轮融资

    社区生鲜摊位项目好菜摊完成500万元种子轮融资

    据投资界6月21日消息,社区生鲜摊位项目好菜摊近日完成500万元种子轮融资1万元。 本轮投资人为个人。 投资者。 好菜坛创始人王高翔表示,本轮资金将主要用于规模扩张、巩固供应链、完善体系和标准化能力等。 好菜坛做的是社区团购和社区菜摊经济的结合。 疫情前,好菜滩是一家

    06-17

  • 伟杰信生物科技完成数亿元C轮融资,国寿股权公司领投

    伟杰信生物科技完成数亿元C轮融资,国寿股权公司领投

    投资圈(ID:pedaily)据5月22日消息,北京伟杰信生物科技有限公司近期完成数百笔融资数万元C轮融资。 本轮由国寿股权公司领投,中关村科学城公司、无锡新商资本、上海科技创业投资集团旗下工业知识产权基金跟投。 老股东国投创业基金、广东顺德科创、风川资本持续追加投资。

    06-18

  • 2020年工业机器人产量能否达到10万台?    这可真不是开玩笑

    2020年工业机器人产量能否达到10万台? 这可真不是开玩笑

    昨天,与工业机器人关系密切的三个部委工信部、发改委、财政部联合发文《机器人产业发展规划(年)》,提出对于工业机器人朋友来说非常重要的目标:力争在机器人关键零部件和高端产品上实现重大突破。 到今年,我国自主品牌工业机器人年产量将达到10万台,六轴及以上工业机器

    06-18

  • MWC 2019即将开幕,中国联通将携中兴、联想等品牌亮相

    MWC 2019即将开幕,中国联通将携中兴、联想等品牌亮相

    移动通信领域最重要的盛会MWC将在西班牙巴塞罗那盛大举办。 国内运营商中国联通也将与上下游产业合作伙伴更新一系列新动态。 携手中兴发布首款5G旗舰手机 雷锋网获悉,中国联通、中兴通信将在大会上正式发布中兴首款5G旗舰手机中兴天机Axon 10 Pro。 预计今年上半年在欧洲和中

    06-18

  • 深圳:严厉查处中介挂牌二手房价格超过交易参考价的行为

    深圳:严厉查处中介挂牌二手房价格超过交易参考价的行为

    深圳市房地产中介协会官网显示,深圳市住房和建设局发布《关于开展房地产经纪机构二手住房成交参考价格应用情况专项检查的通知》( 2月23日,国务院办公厅发布《关于严查房地产中介机构挂牌二手房价格超过交易参考价的行为》,引导理性交易,稳定市场预期。 听,中小企业反馈

    06-17

  • 宁康瑞珠完成数千万元Pre-A轮融资,由阳光聚融资本

    宁康瑞珠完成数千万元Pre-A轮融资,由阳光聚融资本

    投资界(ID:pedaily)领投 据2月16日消息,宁康瑞珠生物制药(珠海)有限公司(简称:宁康瑞珠) (“宁康瑞珠”或“公司”)宣布完成数千万元Pre-A轮融资。 本轮融资由阳光聚融资本领投,黎曼猜想担任本轮融资独家财务顾问。 本轮资金将主要用于平台建设和推动现有产品管线

    06-18

  • 应用材料公司发布 2019 财年第一季度财务报告

    应用材料公司发布 2019 财年第一季度财务报告

    ? 第一季度营收 37.5 亿美元 ? GAAP 每股收益 0.80 美元;非公认会计准则每股收益 0.81 美元 ? 向股东回报 9.42 亿美元 应用材料公司公布了截至 2019 年 1 月 27 日的第一季度财务报告。 第一季度业绩 应用材料公司实现营收 37.5 亿美元。 按GAAP(公认会计准则)计算,公司

    06-06

  • 销售策略-关系营销的商业本质

    销售策略-关系营销的商业本质

    01。 社会对关系营销的看法。 在特定行业/大中型企业开展业务时,如何与大客户建立联系,如何了解采购决策链,如何影响关键人物,需要理顺各种关系,控制项目推进中的各种风险,并充分满足客户的需求。 说到关系,大众对于关系营销还是有固定的看法。 这是一个不能说的秘密,

    06-17

  • 高瓴与无锡新设50亿基金,建立深度科技创新中心,培育专业化新型企业

    高瓴与无锡新设50亿基金,建立深度科技创新中心,培育专业化新型企业

    据投资界11月17日消息,高瓴集团与无锡锡山区人民政府昨天签署战略合作协议,双方建立伙伴关系。 高瓴创投二期人民币专项基金拟设立基金规模50亿元。 与此同时,高瓴深度科技创新中心也在西山启动。 该中心将协助硬科技创业项目转化孵化,进一步培育专精特新科技小巨人企业,

    06-17