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

tdd - 我应该在这里模拟还是使用真正的实现

TDD是测试驱动开发(Test-Driven Development)的缩写,是一种软件开发方法论。在TDD中,开发人员首先编写测试用例,然后编写足够的代码来使测试通过,最后进行重构以提高代码质量。

在回答这个问题之前,我想先解释一下TDD的基本概念和工作流程。

TDD的基本概念:

  • 测试驱动开发是一种敏捷开发方法,强调在编写代码之前编写测试用例。
  • TDD的目标是通过频繁运行测试来提高代码质量和可维护性。
  • TDD的核心原则是"红-绿-重构",即先编写失败的测试用例(红),然后编写足够的代码使测试通过(绿),最后进行重构以提高代码质量。

TDD的工作流程:

  1. 编写测试用例:根据需求和功能规格书编写测试用例,测试用例应该覆盖各种情况和边界条件。
  2. 运行测试用例:运行测试用例,所有的测试用例都应该失败(红)。
  3. 编写足够的代码:编写足够的代码来使测试用例通过(绿),这可能包括编写新的函数、类或修改现有代码。
  4. 重构代码:在保持测试通过的前提下,对代码进行重构以提高代码质量和可维护性。
  5. 重复上述步骤:重复上述步骤,直到所有的需求都得到满足。

回到问题本身,对于TDD的模拟还是使用真正的实现,这取决于你所处的开发阶段和具体情况。下面我将给出两种情况的建议:

  1. 初期开发阶段: 在初期开发阶段,可以考虑使用模拟来进行TDD。模拟可以帮助你快速验证设计和功能,减少对外部依赖的影响。你可以使用各种模拟工具和框架,如Mockito、Sinon.js等,来模拟外部依赖的行为和返回值。这样可以更好地控制测试环境,提高测试的可重复性和可靠性。
  2. 后期开发阶段: 在后期开发阶段,建议使用真正的实现来进行TDD。这样可以更好地验证系统的整体功能和性能,并且可以更准确地检测潜在的问题和错误。使用真正的实现可以更好地模拟真实环境,确保系统在实际运行时的稳定性和可靠性。

总结起来,初期开发阶段可以使用模拟来进行TDD,以快速验证设计和功能;后期开发阶段建议使用真正的实现来进行TDD,以更好地验证系统的整体功能和性能。根据具体情况选择合适的方法,以提高代码质量和可维护性。

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

请注意,以上链接仅供参考,具体的产品选择应根据实际需求和情况进行评估。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

逸言 张逸胡言乱语 说明:本讲义是在ThoughtWorks作为咨询师时,为客户开展TDD Code Kata而编写。案例为Guess Number,案例需求来自当时同事王瑜珩。...与第一个任务不同是,没有使用字符串来表示猜测结果,这是因为这里历史猜测数据不仅包含了猜测结果,还包含了当前测测数据。 现在,应该考虑“显示历史猜测记录”任务了。...TDD根本就不应该用来驱动界面设计,还是将注意力放到业务逻辑上来吧。抛开界面,这里逻辑就转换为: 当用户猜测了数字后,应该显示历史猜测记录。...对协作分析应以被测对象为主。一旦分析清楚,就应该编写测试,通过测试来驱动对象之间协作方式。在编写测试中,参与协作其他对象都可以通过Mock来模拟,不一定要有实现,只需体现它们接口即可。...InputCommand可以定义为接口,真正控制台实现交给了ConsoleInputCommand类。

83040

iOS开发——TDD、BDD方法以及Kiwi单元测试框架

TDD和BDD 在GitBook上看过一篇文章,一个不写单元测试程序员不是一个好攻城狮。坦白说,在Objective-C这个领域里,见过会主动写单元测试程序员还是比较少。...当然了,在那些大开源项目里,还是见到过很多单元测试应用。 于是也就促使想总结总结自己现在对单元测试理解。...测试驱动着整个开发过程:首先,驱动代码设计和功能实现;其后,驱动代码再设计和重构。 上面讲述了TDD和BDD思想差别,看到这里,你们认为当前iOS开发适合怎样测试思想。...内部所有的其他block运行之后调用一次 beforeEach(aBlock) - 在scope内每个it之前调用一次,对于context配置代码应该在这里 afterEach(aBlock)...因为在真正实现时测试时只需要将x删掉就是it,但是pending语意更明确,因此还是推荐pending Kiwi使用实例 就拿项目中一个真实场景来说,在写完一个适配所有iPhone机型宽高类之后

1.6K20
  • 作为现代开发基础,为什么 TDD 没有被广泛采用?

    认为,真正极致主义者并不多,尽管我至少遇到过一个。大多数倡导者在某些方面是温和,但在另一些方面却是偏激——当然也不例外!...只在乎它对数据做了什么。 与此相反,“设计”在 TDD 中是怎样组织代码。munge 是一个公共还是私有的方法?我们是否应该把 http 响应处理程序分割成独立对象?...有时候,大型公共 API 会让模块之间耦合变得更紧密,这就是为了鼓励重用“实现对象”。如果 TDD 与你组织相抵触,那么有时 TDD 是错误。...,并不是想在这里表现得反常,当我严格遵守 TDD 时,就是这样做。...TDD 是一种你与其他方法结合使用方法。有时你会听从这些方法,他们会给出相互矛盾建议。有时,TDD 建议会是正确,有时会是错误。有时它会错得离谱,以至于你在那种情况下不应该使用 TDD

    51030

    【敏捷实践】推行TDD思考

    而惯常软件开发思想,总是认为开发人员不适合做测试,因为他们总是站在自己角度去看待问题,从而可能忽略真正需要测试用例。...不是说没有采用TDD,代码质量就一定不高;但我可以说采用了TDD,代码质量至少有了可以改进基础。 分析需求并进行任务分解能力 需求分析能力常常是开发人员短板。...这种改变显然不是一朝一夕可以完成。以我个人经验以及所观察到情况来看,固然是习惯力量在作祟,然而主因还是因为对TDD方法掌握程度以及一些误解导致。 前面已经述及,任务分解应该TDD起点。...以下是对于“TDD是否需要事先设计”个人观点: Martin Fowler文章Is Design Dead?其实就是对此问题正本清源。个人认为,视场景而定,测试驱动开发仍可进行事先设计。...原则上最好能找到一些开源测试框架,包括生成测试数据,模拟测试行为等……多数情况下,这些开源框架都已经提供了。因为你遇到问题,别人可能早已遇见过。

    73560

    测试驱动开发(TDD)及测试框架Mocha.js入门学习

    这就需要借助优秀测试框架帮助,尤其是支持TDD开发模式自动化测试框架更为重要,因为使用编程是语言是Node.js,那么广泛使用Mocha.js将成为首选。   ...但对而言,好用,适合才是更重要,因此还是会选择TDD为切入点,以后可能会根据实际调整。 2. Test Suite     由上可知,TDD接口使用是suite。...由于TDD和BDD,Mocha提供接口不同,这里例子主要是使用TDD。   ...在这里实现一个简单常见测试用例,来说明Mocha.js如何使用。   首先介绍一下几个重要接口, suite:定义一组测试用例。...这些接口都是与TDD概念中接口对应与相关实现,方便组织测试用例。BDD接口在这里不予赘述,可参考官方文档。

    2.3K70

    Thoughtworks 徐昊:程序员究竟是搞技术还是做工程

    而这,恰恰是我们行业现在所面临一个重要问题。我们盲目地以为只要技术水平好了,职业发展就能很好。但实际上真正应该提到,或者说跟职业发展密切相关,首先是我们工程能力。...当实现过程经过加工与整理之后,才能变成真正有效文档。所以说测试提供了大量技术,比我们在代码中写注释或在文档中写编码设计,更接近实际实现情况。...另一方面,在写测试过程中,对于同一类型任务,实现效率不仅可以变得越来越高,而且这个效率还是可以被度量。比如我之前实现类似的任务时,需要一天时间。...TDD 整体工作流程 明确了这些,接下来我们就来进一步探讨 TDD 工作流程。如下图所示,是在课程中主要使用一张图。...TDD 实际上并不是一种编码技术。因为它并不能驱动我们在任务项中把功能都实现出来,它真正驱动是架构。这正是我们讲编码架构师,是真正实干型而非 PPT 型架构师。

    69720

    敏捷开发时代,彻底结束了

    现在他在考虑到底该如何改变,是选择SAFe还是DevOps。卡尔·波普尔曾说:“新基本原则是,为学会避免犯错误,我们必须从我们错误中学习。”敏捷本身并不能带来投资回报。...之前陆陆续续写过一系列DevOps文章,看法是选择DevOps。大家可以先从了解DevOps入手,已经在之前文章《DevOps生命周期,你想知道全都在这里了!》中已经详细说明了。...03 自动化测试这是实现真正有效敏捷关键因素。听说它被描述为黄金标准,但并非绝对必要。错。自动化测试是绝对必要。它能让你永远快速。...人们喜欢说他们做是测试驱动开发(TDD),但通常他们只是说先写测试再写代码。真正TDD是自动化。而有效TDD是立即完成。人们常说以后再写测试。这永远不会发生。...事实上,自动化回归套件能帮助你实现持续和无限速度,正如《敏捷宣言》所设想那样。试图用手动测试来实现敏捷是失败秘诀。尽一切努力实现自动化,并不惜一切代价保护它。

    11910

    谈谈践行 TDD感受

    大家好,是码农小余,今天我们来讨论 TDD。本文纯属个人实践后感受,若有不确之处,欢迎大佬指导和交流! 细心童鞋可能看出在小余前几篇文章中都有在实践 TDD。...在进入正文之前,可以想想下面这个问题: TDD 属于编程技术还是规范(意味着 TDD 是一种重要敏捷需求和敏捷设计技术)?...有人会因为测试无法捕捉所有的 bug 就不写测试,但却忽略了测试真正价值是能够捕获大多数 bug。...测试先行:先写测试能让你注意力集中在接口设计而非实现。常人思考问题通常都是从“正常路径”出发,即用户使用方式最符合规范那种场景。但作为合格程序员‍,我们应该敏感地想象数据为空时会发生什么?...小余作为一个前端开发人员,看法 TDD 是一种编程技术,它能让更聚焦代码质量,需要花费更多精力使用 SOLID 和设计模式去打磨写过代码,这是当前 TDD 带给我收益。

    48120

    推行TDD思考

    在参与开发项目以及咨询项目中,都有实践TDD经验。直至今日,仍然会在某些功能开发时采用TDD方式实现功能。...虽然没有达到将TDD溶于开发血液之中形成自然而然习惯,但至少也是常用编程利器之一,偶尔使用,效果还算不错。 以下内容则是在某大型团队中推行TDD一些思考。...评价一个开发人员绩效,很重要一个指标就是被测试人员发现缺陷数。 惯常软件开发思想,总是认为开发人员不适合做测试,因为他们总是站在自己角度去看待问题,从而可能忽略真正需要测试用例。...这恰恰成为许多人反对TDD借口,铸造了一块坚硬用于防守盾。 然而,以我个人经验以及所观察到情况来看,这其中固然有习惯力量作祟,然而主因还是因为对TDD方法掌握程度以及一些误解导致。...前面已经述及,任务分解应该TDD起点。多数开发者未能形成任务分解习惯。因此在改变为测试先行时候,错以为应该一上来就写测试。

    1.3K90

    看大神教你正确理解单元测试,不容错过!

    至于各种前置条件(包括边缘条件),可以伪造(后面会讲)它们而不是去调用真正生成它们其他代码,只有这样才能保证“隔离性”,才能称上是单元测试。   ...在这里尽量不说关于 TDD 坏话,而是说它能带来帮助。   刚才提到“驱动”二字才是 TDD 核心思想,因此若想避免 TDD 可能带来问题,我们就要利用好 TDD 能够驱动开发这个特性。...这有点像为大型复杂架构设计接口,你不去考虑具体实现而是考虑输入输出,喜欢称之为:思路黑盒化。...不过就 TDD 本身再强调两件事情:   1、从第一次测试失败到第一次测试成功,这个过程不应该是一步实现(除非你代码实在是太简单了,但这样的话也就没必要非 TDD 不可了)。...二、准备重构即有代码,有可能是改善,也有可能是添加新功能特性或处理新条件逻辑,再有就是修复 Bug 等,在这里都笼统归为重构。

    56010

    深入探索Python中单元测试与TDD实践指南

    TDD遵循“红-绿-重构”循环:首先编写失败测试(红),然后编写足够代码使其通过(绿),最后进行重构以改进代码质量。让我们使用TDD来重新实现上面的add函数。...如果测试通过,它会输出一条简短消息,否则会显示详细错误信息。无论是使用unittest还是pytest,单元测试和TDD都是提高代码质量和可靠性重要工具。...使用测试驱动开发(TDD)重新实现函数接下来,让我们使用测试驱动开发(TDD方法重新实现我们add函数。按照TDD原则,我们首先编写一个失败测试用例,然后编写足够代码来使其通过。...使用 TDD 进一步开发功能现在我们已经实现了最基本加法函数,并且使用TDD方法来验证它正确性。接下来,让我们进一步拓展这个功能,例如增加减法函数,并使用TDD方式来进行开发。...使用 TDD 完善功能并进行重构现在我们已经实现了加法和减法函数,并使用TDD方法来确保它们正确性。接下来,让我们进一步完善这个小工具,并在过程中进行重构,以提高代码可读性和可维护性。

    43020

    让我们再聊聊TDD|洞见

    这些理解主要是建立在片面的理解和实践之上,而在认知中,TDD核心是:先写测试,并使用它帮助开发人员来驱动软件开发。...这个就是现在很多人所谓TDD、实践TDD、喜欢TDD、抱怨TDD,但是它却只是真正意义上TDD一部分而已。 ? TDD金字塔 再来看看David TDD is dead....其次他提出应该使用”Long live testing”, 而他并没有说明这种测试应该是在编写代码之前还是之后写,以及会不会用来作为客户对于软件验收标准。...所以他对TDD理解还是狭隘,认为TDD只是UTDD,导致他写了这篇文章来批评TDD。有可能他在现实工作中已经使用了ATDD,也就是TDD。...最后来看看Kent Beck、Martin Fowler、David关于Is TDD Dead?辩论,觉得他们所说都有道理,并且也是合理

    1.6K70

    对单元测试和测试驱动开发见解

    解决办法遵循三个点: 一是编写业务代码严格执行单一职责原则; 二是面向接口编程,使用依赖注入; 三是利用工具模拟外部资源。...比如:架构组将操作Redis库编写成静态类,如果执行测试将会影响Redis数据。令人头疼是,基本上所有的免费框架都不支持Mock静态类。目前,采取方法是使用JustMock付费功能。...而在TDD中,我们需要面对需求编写测试代码。先写测试代码,相信很多人都会觉得很困惑,没有逻辑,没有方法,测试代码测试什么?TDD理念是测试先行。...每个测试都针对系统缺陷,那么,同样错误不会再次发生 TDD 开发应用程序系统是开放、可扩展、灵活系统。 以上都是废话,还没完整体验过真正TDD开发线上系统。...目前还是觉得,很艰难能坚持TDD模式开发,很难让你团队伙伴都转变思维,从测试代码开始。但不妨碍我们去体会TDD,我们带着测试思维去写业务代码,时刻都想着,这样设计会不会很难测试。

    80720

    TDD 强迫你 Program to Interface

    还是接上次内容,继续测试Dollar class 先在有个新需求--在使用Times方法之前,必须要做用户身份验证,有权限的人才可以用这个方法,反之则不行。...首先看一下 如果不用TDD 我们脑中第一反应功能代码实现应该会是下面的样子--我们去new 了一个LoginChecker实例,然后调用CheckPass方法。        ...等CheckPass写完了,再写Times方法。你是否有嗅出这两种方式写出来测试都很像集成测试?!TDD是讲究Isolation(独立,隔离)。...看看现在 真正实现代码是什么?其实应该是以下这个样子,因为我们还没有 需求(1)。...,用什么依赖注入,还能用TDD 来写实现吗?

    750100

    AutoDev 1.4 规模化 AI 研发辅助:团队 Prompts、自定义活文档、代码检视

    热情,即 #49 issue 中对于《支持TDD开发模式,根据指定测试生成对应实现》,我们构建了 Team Prompts 功能。...TDD-Red.vm,根据生成测试用例,编写第一个失败测试。 TDD-Green.vm,根据生成测试,编写、优化对应实现代码。 TDD-Refactor.vm,重构实现代码。...请返回对应方法代码,使用 ``` 开始你代码块: Prompt 开头部分是一个 Markdown YAML FrontMatter,用于做一些简单配置,在这里 priority 用于配置菜单中优先级...如果您在实现一个对外 SDK,那么更建议你采用我们在《开发者体验:探索与重塑》中定义《文档工程》方式。...IDE 侧应该如何检视代码 在 IDE 侧,我们更推荐方式是理解业务场景,结合部分语法问题进行 review。

    57020

    React全家桶与前端单元测试艺术|洞见

    为什么不谈TDD? 首先,TDD肯定是有价值(价值大小不论)。反对TDD原因一般比较明显,对于TDD是否带来正收益不确定(动机不足)。 某些项目质量要求很高,预算宽绰,TDD势在必行。...(机械也是极限一部分,你不应该使用工具过程中面临太多抉择,而应当专注于将业务翻译成测试)。 为什么谈React全家桶?...(图片来自:http://t.cn/RpwS3AK) 测试Reducer是非常机械,你不需要问自己“到底应该测哪些东西”,只需要机械地测试初始state和每个switch case就好了。...我们在这里依然从简,只用stateless component这个子集,虽然在用到生命周期方法时候需要用一下class,但绝大多数时候应该只用stateless component。...如果用Karma + Chrome真正地渲染测试,你会发现共享一个浏览器实例测试非常慢,几乎无法watch测试,因此我们TDD cycle就会变得不那么流畅了。

    1.1K72

    代码测试意味着完全消灭了Bug?

    最近不得不将一个简单 Java “表情符号替代品”(:joy:→?)移植到 Go。为了确保兼容性,查看了它实现类。...认为这同样适用于代码。 需要澄清是,并不是反对单元测试或 TDD,并且声称我们所有人都应该按照生活中方式编写代码。编写单元测试并在有意义时候实践 TDD。...观点是,单元测试和 TDD 不是最后一个问题解决方案,他们不应该不加区别的使用。这就是为什么频繁使用诸如“some”和“often”之类单词。 测试框架 这让想到了测试框架主题。...请注意,说“正确”:大多数项目并不真正使用 BDD,他们只是使用带有 BDD 语法库,并将其测试代码插入其中。那是特别的 BDD,或者说是伪 BDD。...结语 编写好软件真的很难。当前有一些关于如何实现软件想法,但没有完整实施方案。知道“总是添加单元测试”和“总是使用 TDD”不是答案,尽管它们是有用概念。

    48210

    React 单元测试策略及落地

    让谁来写呢(开发人员还是测试人员)?代码实现那么烂,根本写不出强壮测试,怎么办呢? 回答是,这些单元测试应该由开发者,在开发软件同时编写对应单元测试。...它应该是内建,而不是后补:也即在编写实现同时完成单元测试,而不是写完代码再一次性补足。测试先行,这正是TDD做法。使用TDD开发方法是得到可靠单元测试唯一途径。...长久以来,大家都认为单测是单测,TDDTDD,说单测必须要有,但是否使用TDD(测试先行)应该尊重开发者习惯爱好。...用户推送广告”,不得不在前面先按次序断言许多个不重要实现 测试没有重点,随便改点什么都会挂测试 正确姿势 针对以上痛点,我们认为真正能够保障质量、重构和开发者体验 saga 测试应该是这样: 不依赖实现次序...当然,它们多少还是依赖了组件内部实现细节,比如说 find(TouchableWithoutFeedback),还是做了“组件内部使用了 TouchableWithoutFeedback 组件”这样假设

    1.1K20

    TDD与FDD技术对比

    大家好,又见面了,是你们朋友全栈君。   双工(Duplex)是一种在单一通信信道上实现双向通信过程,包括两种类型,分别为半双工和全双工。   ...单一天线通常很难有足够带宽去覆盖FDD使用全部频率,这也需要更复杂动态调整电路。   FDD系统也可以利用单根电缆来实现。在这种情况下,收发信道分别使用不同频段。有线电视系统即是如此。...TDD系统中发送信息,无论是语音、视频还是计算机数据,都是串行二进制数据。每个时隙长度可能为1字节,同时可以将多个字节组装在一起成帧。   ...例如,在将数字语音转换为模拟格式过程中,没有人会认为这一过程不是全双工。   在某些TDD系统中,上行和下行可以分配相等时隙。...一些TDD系统支持动态带宽分配,其中时隙数量可以按需分配。   TDD真正优势在于,系统只需使用频谱一个信道。此外,没有必要浪费频谱资源设置“安全频段”,或采取信道隔离措施。

    57720
    领券