首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在单元测试中将预期结果建立在实际结果的基础上是不是一种坏做法?

在单元测试中,将预期结果建立在实际结果的基础上是一种不推荐的做法。单元测试的目的是验证代码的正确性,通过对每个独立的代码单元进行测试,以确保其功能按照预期工作。预期结果应该是在编写测试用例时根据代码逻辑和预期行为确定的,而不是依赖于实际结果。

将预期结果建立在实际结果的基础上可能导致以下问题:

  1. 依赖于具体的实现:实际结果可能受到环境、数据等因素的影响,如果将预期结果建立在实际结果上,那么测试结果将依赖于具体的实现细节,而不是代码的预期行为。这样一来,当实现发生变化时,测试结果也会发生变化,导致测试不稳定。
  2. 难以维护和更新:如果预期结果依赖于实际结果,那么每次实际结果发生变化时,都需要更新测试用例。这样会增加测试用例的维护成本,并且可能导致测试用例的过时和失效。
  3. 不利于定位问题:当测试失败时,如果预期结果建立在实际结果上,那么很难确定是代码逻辑有误还是实际结果发生了变化。这会给定位和修复问题带来困难。

相反,应该将预期结果建立在代码的预期行为上,即根据代码逻辑和预期功能编写测试用例,并验证实际结果是否与预期结果一致。这样可以保证测试的稳定性、可维护性和可靠性。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云测试服务(https://cloud.tencent.com/product/qcloudtest)
  • 腾讯云云服务器(https://cloud.tencent.com/product/cvm)
  • 腾讯云云原生应用引擎(https://cloud.tencent.com/product/tke)
  • 腾讯云数据库(https://cloud.tencent.com/product/cdb)
  • 腾讯云人工智能(https://cloud.tencent.com/product/ai)
  • 腾讯云物联网(https://cloud.tencent.com/product/iotexplorer)
  • 腾讯云移动开发(https://cloud.tencent.com/product/mobdev)
  • 腾讯云对象存储(https://cloud.tencent.com/product/cos)
  • 腾讯云区块链(https://cloud.tencent.com/product/baas)
  • 腾讯云元宇宙(https://cloud.tencent.com/product/mu)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

单元测试与重构

平时总能听到“这段代码是有问题,但是现在不敢改”、“这段代码不敢动,所以复制了一份在此基础上进行增改”等等这样的话,这些问题总归来讲,就是没有做好单元测试。...实际开发工作中,经常能见到长达100行及以上函数/方法,这种代码绝大部分开发者会说不具备可测性。如果写代码时时刻想着可测性,是为了让测试通过,开发者再写这么长行数代码都难。...既然测试也是用代码写,那么如何保证测试代码准确性呢?只有一个方法:把测试写简单,简单到一目了然,不需要证明它正确性。 一种测试常见味道是没有断言!...其中边界测试有个CORRECT缩写: Conformance(一致性):值是否和预期一致。可以理解为当输入并不是预期标准数据时,被测试方法是否可以正确输出预期结果(或抛出异常)。...Reference(依赖性):代码是否引用了一些不在代码本身控制范围之内外部资源,当这些外部资源存在或不存在、满足或不满足时,代码是否可以产生相应预期结果

78840

Android单元测试框架Robolectric3.0(二):数据篇

,主动或被动留下来大量味道代码,短时间内顺利完成项目,此后却花了数倍于开发时间来维护此项目,可谓“前人砍树,后人遭殃”,讽刺是,砍树的人往往因为优秀绩效,此时已经步步高升,而遭殃往往是意气风发...(3)是不是对重构没信心?这个话题太老生常谈了,配备有价值、高覆盖率单元测试可解决此问题。 (4)当你写Android代码(比如网络请求和DB操作)时候,是如何测试?...关于第二个问题,己所不欲勿施于人 我始终觉得让QA写UT,是一种傻叉行为。单元测试一种白盒测试,本来就是开发分内之事,难道让QA去阅读你恶心充满味道代码,然后硬着头皮写出UT?...这种做法不仅仅可以写UT过程中使用,开发过程中也可以使用,当服务端接口开发滞后于客户端进度时,可以先约定好数据格式,客户端采用模拟网络请求方式进行开发,此时两个端可以做到不互相依赖。...网络请求异步回调如何进行测试 关于网络请求之后回调函数如何测试,笔者暂时也没有什么自己觉得满意解决方案,这里提供一种做法,权当抛砖引玉,希望有此经验的人提供更多思路。

1.3K20
  • 『Go 语言学习专栏』-- 第十一期

    大多数使用是契约测试,即也是使用框架,对生产者和消费者独立测试,消费者和生产者相互独立,相互解耦,调用API,和预期结果对比。...编程领域内还有一个重要思想,叫TDD, 即测试驱动开发。 编写一个测试,再写函数,直到测试通过,如此循。...(当然实际上测试驱动开发,真正实施还是略微有点困难,一般做法都是开发、测试,而不是测试、开发、测试、开发) 一般初学者,是不太会关注测试,没有进入职场之前,我甚至完全没关注测试,直到走入职场......test.Errorf("wrong: result=%d actual=%d", result, t.result) } } } 先给定一堆测试数据,再遍历测试数据,调用函数,看结果是否和预期一致...总结 本节探讨了go 中单元测试编写,主要是包括:一般单元测试编写、表格驱动单元测试编写、第三方库框架单元测试编写。 希望对你有所启发。

    54330

    浅析 FP:JavaScript 中纯函数

    前言 纯函数 是一个常见概念,日常工作中也经常会遇到,它其实非常简单,今天我们来了解一下它好处以及为什么要使用它。...其实不需要修改外部 isValid 变量,我们只需要在函数中将验证结果 return 出来: const user = { username: 'savokiss' } function validate...那我们如果换成纯函数版本 greet ,所有都是那么自然~ 只需要修改单元测试中传入参数即可! 可缓存性(Cacheable) 纯函数可以根据输入来做缓存。...实现缓存一种叫做 memorize 技术。 下面的代码来自 Vue 源码: /** * Create a cached version of a pure function....,如果多次调用就会返回缓存后值,从而节省计算资源,而这一切前提都建立在传入 cached 中那个函数为纯函数基础上

    60320

    set 方法是味道?

    没错,在这种思路下,可变数据(Mutable Data)就成了一种味道,这是 Martin Fowler 新版《重构》里增加味道,它反映着整个行业对于编程新理解。...这种想法源自函数式编程,数据建立在不改变基础上,如果需要更新,就产生一份新数据副本,而旧有的数据保持不变。...所以,Martin Fowler 《重构》第二版里新增了可变数据作为一种味道,这其实反映了行业理解也是逐渐推进。...那么,实际工作中,我们怎么设计不变类呢?...在实践中,完全消除可变数据是很有挑战。所以,一个实际做法是,区分类性质。值对象就要设计成不变类,实体类则要限制数据变化。

    35640

    测试用例模板和例子

    说明 测试数据 用户名=yiyh 密码=1 操作步骤 操作描述 数 据 期望结果 实际结果 实际结果 测试状态(P/F) 1 输入用户名称,按“登陆”按钮。...4、测试用例不应该包含实际数据; 测试用例是“一组输入、执行条件、预期结果”、毫无疑问地应该包括清晰输入数据和预期输出,没有测试数据用例最多只具有指导性意义,不具有可执行性。...5、测试用例中不需要明显验证手段; 我见过很多测试工程师编写测试用例中,“预期输出”仅描述为程序可见行为,其实,“预期结果含义并不只是程序可见行为。...集成测试是单元测试基础上,测试将所有的软件单元按照概要设计规格说明要求组装成模块、子系统或系统过程中各部分工作是否达到或实现相应技术指标及要求活动。...从图1可以看出,集成测试需要花费时间远远超过单元测试,直接从单元测试过渡到系统测试是极不妥当做法

    95920

    码农,你真的了解TDD和BDD吗?

    因为很多单元测试框架运行测试过程中,测试不过时会用红色展示测试结果,而通过时则采用绿色进行展示,这已经成了单元测试框架约定俗成规则。...对很多人来说,TDD 是一种难以接受做法,抛开理念上差异,更重要原因是,写测试无从下手。很多时候写不出测试,主要是面对需求太大了。...我们都知道,软件开发中最重要一个概念就是分层,也就是一些模型基础上,继续构建新一些模型。...单元测试框架写测试方式更多是面向具体实现,这种做法层次是很低,BDD 希望把这个思考层次拉高。拉到什么程度呢?...如果登录方式有所调整,用户输完用户名密码自动登录,不需要点击,那这个用例是不是需要改呢?下面我换了一种方式描述,你再感受一下。

    77410

    区块链如何能颠覆谷歌广告经济

    如今,类似于智能手机和社交平台是区块链和加密网络,它们是建立在分布式副本基础上。与任何平台一样,区块链实际上是一种设计空间,可以让其他人在设施基础上进行构建。...在这些类型网络上建立协作团队正在为他们工作带来一种高质量,Facebook这样平台上已经被严重侵蚀了。...70年代开发人员建立在开放网络上,使用web标准和分散协议,他们可以得到信任,所以那些区块链上工作的人正在开发具有这种质量产品和服务。...这还有额外好处:消费者可以依赖产品,而投资者可以支持这些公司,因为他们知道,该平台拥有确保无结果机制。 这很可能是未来10年新兴平台基础。...我们离这还有几年时间,但未来发展一种方式可能是投资者Charlie Munger所说一句话:“给我看看激励,我会给你展示结果。”

    48300

    信息时代思维方式:量级、时代基线、极限(边界)

    引言 控制论、信息论和系统论,是新时代科学基础和方法论。时代,需要掌握新方法论。 将思维方式用于工作和生活中,就是一种方法论。...生活在小数字世界里的人,天然地缺乏处理大数字世界里问题思维方式,无形之中将人们限制天花板之下。...人工智能是建立在网络效应基础上,它是通过很多彼此联系计算机共同协作工作而产生。 集中很多人智慧,产生叠加效果 1.6 自顶向下和自底向上 人适合自底向上。...从工程角度讲,好和,只是固定成本下相对表现。 计算机里面无论是软件设计,还是硬件设计,都是平衡性能和成本关系。 II 工程思维:边界里面做事情,遵循一套工程思路解决问题。...可以理解成直到今天为止人类所掌握工程知识。我们所有的工作,应该建立在这条线基础上,而不是从它下面开始做起。

    22230

    软件敏捷开发 TDD 方案

    这里B并非指的是Business,实际上BDD可以看作是对TDD一种补充,让开发、测试、BA以及客户都能在这个基础上达成一致,JBehave之类BDD框架。...DDD:领域驱动开发(Domain Drive Design) DDD指的是Domain Drive Design,也就是领域驱动开发,DDD实际上也是建立在这个基础之上,因为它关注是Service层设计...,不能测试或觉得不需要测试一律放弃; 改/加任何功能代码前,一定要先想是不是要改/加测试用例; 功能/测试代码,结构不合理,重复代码等情况,测试通过后,及时进行重构。...TDD开发流程 分析并确定一个目标测试场景; 添加一个单元测试来验证该测试场景输入输出; 运行该测试,得到失败测试结果; 写最简单功能代码来通过该测试; 再次运行该测试,看到测试通过; 进行代码重构...什么是有效单元测试,有很多人写测试,连到底测什么都不清楚,也可能连断言都没有,通过控制台输出,肉眼对比来验证。

    1.8K50

    「求职」跳槽面试高频&棘手问题作答方式

    先说一个常见职业类问题“经常跳槽是好是?” 这个问题相信很多同学答案都是“”。确实,大多数情况下,经常跳槽是不好。...(HR内心:那是不是性格有什么问题?或者工作不到位?)...这个问题也是面试中常遇到,回答好与结果天差地别。 分析一下:面试官希望招聘同学,一定是有充分思考,做过一定匹配才投递岗位,而不是浪投。...回答思路:现有薪资基础上上浮20%-50%,太低会让HR觉得你着急入职,怀疑你是否是被裁;太高会让HR觉得你对当前市场和定位不了解,但凡有性价比高一些同学,你本次面试就结束了。...好回答:我期望薪资是现有全包基础上增加30%,我认为当前能力和知识储备,足以为业务带来对应价值。 以上就是本期内容分享。

    19910

    豆瓣 9.1!二刷了这本经典,YYDS

    学习重构必看一本神书《重构:改善代码既有设计》从两个角度给出了重构定义: 重构(名词):对软件内部结构一种调整,目的是不改变软件可观察行为前提下,提高其可理解性,降低其修改成本。...开发一个新功能之后&之前 开发一个新功能之后,我们应该回过头看看是不是有可以改进地方。添加一个新功能之前,我们可以思考一下自己是否可以重构代码以让新功能开发更容易。...我们阅读理解代码时候,如果发现一些味道的话,我们就可以对其进行重构。...再比如说我们代码有一个类专门负责数据脱敏,我们为了验证脱敏是否符合预期专门为这个类写了一个单元测试单元测试也是需要重构或者修改。...某些情况下我们不应该进行重构: 学习了某个设计模式/工程实践之后,不顾项目实际情况,刻意使用在项目上(避免货物崇拜编程); 项目进展比较急时候,重构项目调用某个 API 底层代码(重构之后对项目调用这个

    37920

    测试你红包代码

    最简单直接方法就是,调用一下代码,给一组输入数据,把结果打印出来,肉眼看一看是不是正确。以我代码为例: print redPacket(5, 2000) 别忘了我们使用单位是“分”。...“浮点精度”,一个小数实际值和显示值会有一定误差。...比如可以 python 命令行里试一下 1.1 + 2.2 == 3.3,看看结果是什么。 因此,判断小数是否相等时,一般都采用判断差值是否小于一个很小值。 运行代码,你将会看到所有测试结果。...如果没有 ERROR 输出,就表示所有测试都是符合预期。 这也是通常在开发中一种做法:除了完成功能代码外,再提供一套测试代码,用来验证功能代码是否正确,保证代码质量。...这种对于单个功能进行验证测试被称作“单元测试”。 有不少用来做测试模块,其中 unittest 就是 python 自带一个做单元测试模块。

    1.4K70

    一个完整TDD演练案例(二)

    关键在于,我们该如何编写单元测试来验证生成结果。我们对结果要求是: 数字必须是0…9之间; 产生四个数字不能相同; ---- 讨论:究竟由谁来承担“随机生成答案”职责?...一种做法是获取Answer属性,然后再进行验证。那么,为了测试验证而暴露这些属性,是否适合? 要完成对答案正确性验证,直接暴露答案属性是不妥当,至少目前没有获取答案属性需求。...毕竟,这种对答案正确性校验,也可以说是业务逻辑一种。 说明:开始编写“检查输入是否合法”任务时,你会发现,这里所谓多余验证,就会派上用场。...---- 知识:JUnit中对异常验证 随着JUnit版本演化,先后提供了三种验证异常机制。 一种是传统测试代码中通过编写try... catch结合fail()方法进行验证。...生成随机数自然是调用JavaJDK。单元测试环节中,倘若我们要测试单元需要调用别的API,则在这个测试中,我们可以假定这个API是正确。我们对Java JDK正确性自然信心十足。

    80830

    激活和留存

    增长黑客拉新和常规市场/运营拉新区别在于,增长黑客更看重是新用户为产品带来实际价值,这个价值可以是电商产品中用户购买转化,也可以是内容社区产品中用户看帖、发帖、评论,追求新用户数量同时,...新用户下载APP可能带有一定预期,比如下载共享单车APP是为了骑车,如果下载完APP发现想骑车时候找不到车,或者第一次骑车就碰到了一辆,那么这就和用户预期不符,用户没办法体验到共享单车带来便捷性...共享单车想要激活用户,就是多投放单车数量,新用户可以很顺利骑车,至于车好不好骑,骑某个品牌单车帅不帅,这些都是建立在能找到车基础上。...通过激活环节,用户体验到了产品价值,这个时候用户留存意愿是最高,产品功能带来新鲜感、好奇感、解决需求有效性让用户会持续使用产品一段时间,但是当新鲜感或者用户需求不再那么强烈以后,对产品使用频次也就没那么高了...所以说,活跃用户是留存中一种用户状态,活跃度是衡量用户一个指标,用户越活跃,进行付费或分享可能性就越大,也就是说用户越活跃,那么对产品带来价值贡献可能性就越高。

    96810

    软件测试方法课程笔记(3)

    白盒测试 这是一种验证技术,软件工程师可以用它来检查他们代码是否按预期工作。 它考虑到系统或组件内部机制。 它也被称为结构测试,清楚盒测试和玻璃盒测试。...单元测试过程: 详细设计阶段完成单元测试计划 建立单元测试环境,完成测试设计和开发 执行单元测试用例,并且详细记录测试结果 判定单元测试是否通过 提交单元测试报告 单元测试优点: 单独进行,一起进行...集成测试 集成测试概念: 集成测试是软件测试阶段, 其中将各个软件模块作为一个组合进行测试. 集成测试单元测试之后并且系统测试之前. 集成测试之前,单元测试已经完成。...软件质量 满足用户需求; 建立合理进度、成本与功能关系; 具备扩展性和灵活性; 能有效处理例外情况; 保持成本和性能平衡 软件质量保证 为了确保软件开发过程和结果符合预期要求,而建立一系列规程...测试度量 四个一般核心领域,可以协助设计有效度量标准 时间表相关度量用来量度各种各样活动实际完成所用时间和估计时间比较。 质量相关度量用来量度产品或过程质量。

    51350

    软件测试分类有那些,你还知道吗

    单元定义:C中指一个函数,Java中指一个类,图形化软件中,单元一般指一个窗口,1个菜单。 回答以下小问题: 1.什么时候进行单元测试? 2.由谁来做单元测试? 3.单元测试依据?...4.单元测试通过标准? 5.国内单元测试现状? 6.如何进行单元测试? 集成测试 又叫组装测试,通常在单元测试基础上,将所有程序模块进行有序、递增测试。重点测试不同模块接口部分。...动态测试 是指实际运行被测程序,输入相应测试数据,检查实际输出结果预期结果是否相符过程。 4 验收测试(其他分类) α测试 1、Alpha 是内测版本,即现在所说CB。...软件正式版本推出之前几个版本, 需要有人测试一下, 看看是不是有问题。...简单来说,阿尔法测试主要是测试人员开发环境下测试,贝塔测试是实际环境中测试,或者公司内部人员模拟真实环境中测试。

    1.1K30

    学习单元测试,告别祈祷式编程

    目的: 通常用单元测试来验证代码逻辑是否符合预期。完整可靠单元测试是代码安全网,可以代码修改或重构时验证业务逻辑是否正确,提前发现代码错误,减少调试时间。...Arrange--准备数据 Act--运行代码 Assert--判断结果是否符合预期 比如我们要给下面这段代码(golang)加单元测试: func Add(x, y int) int { return...= tt.want { // 数据错误时候有明确标明测试数据,期望结果实际结果,这一点还是有用 t.Errorf("multiply(...代码比较长(这里只列出来了三个用例,实际上并没有完整覆盖全部结果) 测试方法如果出错了并不容易定位位置(三个测试数据都在一个方法,任何一个错误都会指向到同一个位置 有个测试数据比较长,不太能直观判断测试数据是否正确...然后在这个子集基础上针对边界值做一些检查,比如36000、144000 等。 私有方法如何测试 通常情况下,如果私有方法公有方法中有被调用,通过测试公有方法就已经可以间接测试到私有方法。

    56330

    自动化运维持续集成

    三、持续交付(Continuous delivery,缩写为 CD) 持续集成 -> 再次测试 -> 结果发布 CD 是一种软件工程手法,让软件产品产出过程一个短周期内完成,以保证软件可以稳定、持续保持随时可以释出状况...另一方面,持续交付是一种自动化交付手段,关注点在于将不同过程集中起来,并且更快、更频繁地执行这些过程。因此,DevOps 可以是持续交付一个产物,持续交付直接汇入 DevOps。...四、持续部署(Continuous Deployment) 持续部署则是持续交付基础上,把所有的变更自动部署到生产环境中。...构建,实现功能模块构建测试,保证该模块当前可用状态。 测试,单元测试和集成测试,保证各个功能模块完整性和稳定性。 交付,建立在CI基础上,让软件构建、测试与最终版本变得更快以及更频繁。...部署,是持续交付基础上,把部署到生产环境过程自动化。 回滚,一旦当前版本发生问题,就要回滚到上一个版本构建结果。最简单做法就是修改一下符号链接,指向上一个版本目录。 ?

    94120

    分层测试系列文章

    2.1 单模块接口测试 接口测试代码与被测试接口同源,测试代码中将依赖外部服务mock掉,数据库不mock,测试代码与被测试代码同一个进程。...接口测试挑战 验证场景有限:只能验证预期范围内问题,接口测试是根据产品需求和后端架构而产生,设计所有用例均是接口设计人员所预期结果,无法测试出一些不可预见问题。...5.3 接口测试用例包括内容 接口测试用例内容包括:输入参数组合、预期结果实际运行结果以及备注其他相关信息,如:测试功能点说明,测试环境说明等。...预期结果包括接口返回值以及接口输出参数内容。...,可能会使用到单元测试用例设计方法。

    32020
    领券