正解TDD

前端自动化测试实践:从Jest到Playwright的完整方案 前端自动化测试是现代Web开发中保障代码质量的核心实践,通过脚本自动验证UI组件功能与视觉一致性。其技术原理主要基于DOM操作模拟、事件触发和结果断言,能够显著提升测试效率并降低人工验证成本。在工程实践中,单元测试框架如Jest配合Testing Library可验证组件逻辑,而Playwright等E2E工具则能模拟真实用户操作流。特别在持续集成环境中,结合GitHub Actions可实现代码提交自动触发测试流水线,有效捕捉回归问题。对于视觉一致性保障,Storybook与Chromatic的截图对比方 阅读详情

本文的目的是以最精炼的语言,正解什么是TDD,为什么要TDD,和TDD的难点。

什么是TDD?

简单的说,TDD = 测试先行(TFD, Test First Development) + 重构(Refactoring) + 回归测试(Regression Test)。

Image

如果要实现某个功能,TDD要求在初步定义完这个功能的外部接口之后,先根据这个功能的用例写测试代码(黑盒测试),测试代码检验的是这个功能的外部接口的使用场景,而非具体的实现细节。然后,才是实现这个功能的这些外部接口,在实现的过程中,同时还会根据需要写一些单元测试,一般单元测试测试的不仅仅是外部接口,还包括实现的内部细节(白盒测试)。关于单元测试的更多讨论,请参考: UnitTesting。如果发现这些外部接口设计得有问题,则需要进行修改和重构。每次代码修改之后,或者增加新功能之前,都需要回归运行已有的所有测试(不仅仅是测试先行的这些测试,还包括所有的单元测试)。

测试先行保证了功能的所有使用场景的逻辑性和完备性;重构则在保证功能语义的前提下,尽可能安全的改进设计和实现;回归测试则保证了任何修改不破坏任何已有的功能,这样开发人员就能放心大胆地专注于实现或改进眼前的功能。这样无疑既提高了开发人员的信心和工作效率,而且时刻保证了功能的完整性和代码的正确性。

如果对TDD详细的前世今生感兴趣,请参考: TDD on WikiPedia

为什么TDD?

TDD最大的好处是时刻确保了每次添加或修改任何代码的过程中,对任何已有的功能都是安全的。尤其是对于编译和回归测试的运行时间较短的情况下,有大牛甚至建议每新增或修改超过10行可运行的代码,就运行一次回归测试。这样不仅仅能确保你写的每一行代码的正确性,而且,基本可以避免使用单步调试来发现问题,因为,问题往往就应该在最新的这10多条代码上。

TDD的另一个好处是,相对于几十页上百页的天知道和什么年代的代码同步的技术文档来说,TDD的测试代码因为描述的就是功能的实际使用场景,并且和代码一定是实时同步的,对开发人员来说,它其实是一种既准确,又易于理解,易于维护的“技术文档”。

TDD的难点

  • 并非所有类型的代码都适合TDD,尤其是那些不能由机器简单的判断对错的情形,比如图形UI和数据库设计。
  • TDD需要让管理层意识到TDD的价值,为TDD预留额外的开发时间,并且强制每个开发人员按TDD的流程来写代码,需要自上而下的管理和开发流程的支持。

英文资料

从零构建高性能C++服务器:Magic-C++项目实战与工程化指南 C++作为高性能系统编程的核心语言,其核心价值在于将底层硬件控制能力与高级抽象相结合,实现极致的执行效率。其原理基于零开销抽象、RAII资源管理和直接内存访问,这使得它在操作系统、游戏引擎、高频交易等对性能有严苛要求的场景中不可替代。通过项目驱动的学习路径,开发者能深入理解现代C++特性如智能指针、移动语义及STL容器的工程实践。本教程以构建高性能HTTP服务器为例,系统讲解Reactor模式、线程池设计与网络编程等关键技术,帮助学习者掌握从语法到架构的完整技能链,其中缓冲区优化与异步生命周期管理是提升并发 阅读详情

相关推荐

2026生产级AI Agent搭建实战:Strands SDK+Amazon Bedrock全链路指南

AI Agent已从概念演进为可部署、可审计、可运维的企业级软件系统,其核心在于状态管理、可观测性与安全守卫能力。基于LLM的智能体并非简单调用函数,而是需集成记忆控制、钩子拦截、结构化输出与模型治理等工程机制。Amazon Bedrock作为企业AI基础设施底座,提供原生Guardrails、OpenTelemetry追踪与VPC私有调用等关键能力,而Strands SDK正是深度适配Bedrock的生产就绪型Agent Harness。本文聚焦真实日志分析场景,覆盖Python工程化奠基、工具定义与输入

weixin_33736832的博客 736

如何理解TDD的三条规则

如何理解Bob大叔的TDD三条规则?第一条和第三条讲的是只有和只要。只有Case False的情况下才能写Code。只要新写的Code使得Case通过了,就不要写任何新功能代码了。重构是可以的。第二条是说只允许编写Case失败的代码。这一条操作起来有个疑惑。比如为写一个算法,先把写一个验证功能的Case,然后写代码。Case通过以后,想验证下特殊值情况,又写一个Case,结果Case也幸运的Pas

睡猫的博客 4007

敏捷开发模型和敏捷开发方法比较

本文对比了敏捷开发模型与敏捷开发方法的区别:敏捷开发模型是高层指导框架,包含敏捷宣言和12条原则,强调价值观而非具体实践;敏捷开发方法则是落地实践体系,如Scrum、XP等具体方法论,包含明确角色、流程和工具。两者关系类似宪法与法律条文,前者确立原则,后者提供执行路径。文章通过概念定义、核心内容、实例对比等维度阐明二者的层次差异,并给出方法选择建议,指出团队应先理解敏捷模型,再选择适合的方法实现敏捷转型。

几十年资深高级架构师,技术专家的技术笔记。专注C、Java、Python、微服务、云原生、AI工程化及高并发系统分布式架构实战,分享源码剖析、性能调优与架构治理经验。 61

谈谈什么是TDD?

TDD 的简单概念是在编写新代码之前(开发之前)编写和纠正失败的测试。这有助于避免代码重复,因为我们一次只编写少量代码以便通过测试。(测试只不过是我们需要测试以满足它们的需求条件)。测试驱动开发是在实际开发应用程序之前开发和运行自动化测试的过程。 TDD的主要目标是使代码更清晰、简单和无bug。 测试驱动开发从设计和开发应用程序的每个小功能的测试开始。在TDD方法中,首先,开发测试来指定和验证...

梅森上校的博客 业精于勤荒于嬉,形成于思毁于随。 2万+

AppStore逆向分析:从网络抓包到自动化模拟的完整实践

在移动应用生态中,理解客户端与服务器之间的通信协议是进行自动化测试、数据分析和系统集成的关键技术基础。通过分析网络请求与响应,可以深入理解认证、会话管理和数据交换的原理,这对于构建稳定的自动化流程至关重要。其技术价值在于能够实现合法场景下的流程模拟,例如应用元数据监控、沙盒环境测试或内部工具开发。在实际应用场景中,开发者常需处理登录态维持、请求签名验证及风控策略应对等挑战。本文聚焦于AppStore这一封闭生态,详细拆解了其登录、查询等核心环节的通信机制,并探讨了使用Python结合抓包工具进行安全逆向分析

weixin_42524171的博客 926

基于AR和SLAM技术的商场智能导视系统技术原理详解

本文针对智慧商场室内导航需求,提出基于AR和SLAM技术的商场智能导视系统技术方案,实现了沉浸式导览体验并促进消费转化,助力商场运营升级。

维小帮定位导航的博客 1243

浅谈测试驱动开发(TDD)

浅谈测试驱动开发(TDD)内容:背景1. 优势2. 原理3. 过程4. 原则5. 测试技术6. Tips参考资料 关于作者

mounTon... 2439

Altium Designer许可证冲突?手把手教你用Windows防火墙彻底禁止AD联网(附详细截图)

本文详细介绍了如何通过Windows防火墙精准管控Altium Designer的网络权限,解决许可证冲突问题。通过配置入站和出站规则,彻底阻断AD的联网行为,提升软件运行效率。适用于需要稳定使用Altium Designer的工程师,附有详细截图和高级验证方法。

weixin_38170137的博客 423

TDD 开发理论 (原创)

TDD基本思路 通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。 TDD的开发流程 l        分析并确定一个目标测试场景 l        添加一个单元测试来验证该测试场景的输入输出 l        运行该测试,得到失败的测试结果 l        写最简单的功能代码来通过该测试 l        再次运行该测试

chinabluexfw的专栏 941

Multisim仿真运放积分器踩坑实录:为什么你的方波变不成三角波?

本文针对Multisim仿真运放积分器时方波无法转换为三角波的常见问题,提供了详细的排查与调试指南。文章指出,经典RC积分电路因直流反馈开路导致运放饱和,核心解决方案是在反馈电容两端并联大阻值电阻以稳定直流工作点。通过参数优化(调整Rin、C、Rf)和高级仿真技巧,手把手教你调出线性度好、幅度适中的完美三角波,并分享异常波形(如饱和、不对称、振荡)的对应策略。

weixin_29231263的博客 114

Robocup 仿真2D 学习笔记(二) 球队代码编译和上场

环境的一些问题 最近在使用rcssserver 和 rcssmonitor时可能会遇到./configure失败的问题,可以检查一下文件夹是否有makefile文件,如果是编译后的包直接sudo make install,如果还不行,还可以源码下载编译 rcssserver: https://sourceforge.net/projects/sserver/files/rcssserver/...

markchalse的博客 6014

TDD 开发测试

测试驱动开发(Test-Driven Development)。是敏捷开发中的一项核心实践和技术。 TDD是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。 变红 ——> 变绿  ——>  重构 在进行 TDD 案例编写的时候,看一个简单的需求(经典案例): 输入一个非元音字符,并预期返回字符本身 输入一个元音(a,e,i,o,u),返回  mo...

依着风睡的博客 8649

1.毫米波雷达心率、呼吸原理实现(一)实例

毫米波雷达心率、呼吸检测原理本项目分两到三篇文章写完,第一阶段借鉴TI开源项目以及根据自己的见解适当更改信号处理链通过AWR1843汽车雷达传感器和DCA1000采集卡采集数据完成人体呼吸和心跳检测算法的实现。第二阶段将仿真成功的代码搬移TIAWR1843传感器并通过串口数据实现生命体征的实时处理。本文即为第一阶段实现过程。本文首先概述毫米波雷达呼吸心跳检测的原理,紧接着概述本项目信号处理流程,另外本项目第一阶段通过matlab仿真验证算法的有效性,仿真源码可关注小编并私信可取。1.概述。

Poulen的博客 2万+

testdouble.js最佳实践:避免8个常见测试陷阱

testdouble.js是一个轻量级的JavaScript测试替身库,专为TDD(测试驱动开发)设计。它允许开发者创建存根(stub)、模拟(mock)和间谍(spy)对象,以隔离测试代码并验证依赖交互。本文将揭示使用testdouble.js时最常见的8个测试陷阱,并提供实用解决方案,帮助你编写更可靠、更易维护的测试代码。 ## 1. 过度使用验证(Verification)而非行为测试

gitblog_00539的博客 533

CVE-2021-3156本地提权漏洞复现

受影响版本 sudo: 1.8.2 - 1.8.31p2 sudo: 1.9.0 - 1.9.5p1 测试 我这里是在本地centos7上进行测试。 需要目标机器上存在python编译器、目标主机出网或者能上传文件到目标主机。 以非root用户登录系统,并运行如下命令: sudoedit -s / 通常响应一个以 sudoedit: / 开头的报错,多半存在漏洞。 利用 提权脚本: https://www.o2oxy.cn/wp-content/uploa

The current road is different, love needs to distinguish between right and wrong 3776

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

理解TDD

本文的目的是以最精炼的语言,正解什么是TDD,为什么要TDD,和TDD的难点。 什么是TDD? 简单的说,TDD = 测试先行(TFD, Test First Development) + 重构(Refactoring) + 回归测试(Regression Test)。

clucci的专栏 687

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

业务和技术哪个更重要

不同的项目有不同的功能,不同的功能需要不同的实现,实现这些核心功能的代码就叫业务逻辑。在软件系统架构中,软件一般分为:表示层、业务逻辑层,数据访问层。也就是界面和交互;负责定义业务逻辑(规则、工作流、数据完整性),接收来自表示层的数据请求,逻辑判断后,向数据访问层提交请求,并传递数据访问结果,业务逻辑层很像一个中间件,承上启下的作用。负责数据读取;正确理解需求,可以将需求没有偏差的开发出来,这是程序员的核心能力吧?

kkkkwing的博客 276

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

AI 编程的“90% 陷阱”:为什么你生成代码 1 分钟,修 Bug 却要 1 小时?

简单的逻辑还能应付,一旦涉及到复杂的业务重构,它写的代码往往是 90% 可用,剩下 10% 充满了隐蔽的 Bug、过时的库引用和糟糕的结构。LLM 的推理能力是有限的,当它同时兼顾“理解旧逻辑”、“设计新架构”和“编写具体代码”时,它的注意力(Attention)会发散,导致逻辑坍塌。这是你和 AI 签订的“契约”。如果你不想再被“90% 陷阱”折磨,希望从“拼运气的聊天者”进化为“掌控全局的架构师”,欢迎关注我的极客时间专栏。许多人使用 AI 的方式是:直接把一坨复杂的代码扔进去,说“帮我重构它”。

TonyBai 1103

最小物联网系统设计——给Laravel添加测试

似乎在ThoughtWorks的几天之后,对测试有了点认识。于是试着将测试扩展到自己所知道和认识的领域,换句话说,需要添加这些测试到自己的这个项目上: 开源IOT——一个最小的物联网系统设计方案及源码 源码:https://github.com/gmszone/iot 首页:http://iot.phodal.com

Phodal's zenthink 5765

端到端代码生成摸底

因为一直受困于人少事多没hc,我对提效是有执念的。claude3.7和最近疯狂的投资情况,似乎意味着ai coding是个正解。加之之前有过相关的思考,最近沉迷AI coding无法自拔。一方面是要摸清楚边界(但是这个边界会随着模型能力提升急剧变化),另一方面是在差不多的边界下找到一个尽可能好的端到端生成方案。

pouloghost的专栏 876

Claude Code 最佳实践:老司机手把手教你玩转高效 AI 编程

《Claude Code高效开发指南》摘要:本文提供15条实用技巧,帮助开发者充分发挥AI编码助手Claude的潜力。从项目配置(CLAUDE.md文件)、代码风格规范,到测试驱动开发、前端视觉还原等进阶用法,涵盖开发全流程。重点包括:明确指令技巧、快速纠偏方法、多Claude协作模式、自动化工具整合等。通过自定义设置、流程优化和隐藏功能,将Claude从基础问答工具升级为智能开发助手,实现效率倍增。适合希望深度整合AI工具到开发工作流的程序员参考。

洛少的专栏 2223

AI框架怎么选|3张图把LangChain·LangGraph·LlamaIndex一次讲透(附代码

这篇把 LangChain·LangGraph·LlamaIndex 三个框架各自主场讲清——LangChain 拼通用链、LangGraph 编有状态流程、LlamaIndex 接数据做 RAG,三者不是三选一而是按场景组合。框架是脚手架,不是答案。很多人在三个框架间反复横跳,想找一个"最火的"一劳永逸——但框架解决的是"怎么把组件拼起来/怎么把数据接进来",解决不了"你的应用到底该做什么、该怎么做对"。

yuhaiqun1989的博客 425

Pytest vs unittest:为什么现代Python测试首选Pytest

Python测试框架的核心在于如何降低编写成本、提升调试效率并支持真实工程场景。unittest作为xUnit系传统框架,依赖类结构和样板代码,导致维护困难、失败信息模糊;而Pytest以函数式设计、AST断言重写和fixture依赖注入为基石,实现零样板、精准报错与环境可组合。其插件化架构支撑从单元到端到端的全链路验证,天然适配API测试、数据管道与机器学习服务等高频场景。尤其在提升测试覆盖率、加速CI反馈和保障重构安全方面,Pytest已成为中大型Python项目的事实标准。

weixin_30654419的博客 337

c语言写tdd测试代码举例_关于TDD以及如何将其用于未经测试的旧代码的想法

c语言写tdd测试代码举例 序幕 我在TDD上的个人经历大部分与互联网上的其他经验相匹配,总之,TDD很好。 它可以帮助您编写更好的代码,创建干净且经过良好测试的体系结构,使重构和设计更改更容易。 它可以指导您的设计决策,帮助您思考需要处理的所有可能情况以及更多其他情况。 我不想重复已经写了一百遍的相同的事情,而不是我试图分享一些个人想法。 TDD的缺点? 并非所有人都同意我的第一句话,例...

danpu0978的博客 450
上一篇: 讨论: TDD in HTML & JavaScript 之可行性和最佳实践
下一篇: 理解单元测试(Unit Testing)
teddyma
博客等级 码龄25年 5粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值