TDD的粒度

一般来讲,TDD的开发方式由三个步骤组成:
1. 编写一个失败的测试用例
2. 编写功能代码让这个测试通过
3. 如果代码有坏味道,就Refactor,否则goto 1

但是实际开发中,在哪一个层面上编写这个失败的用例是一个更为关键的问题。比如说一个Invitation的需求,我们可以

1. 用Selenium编写一个Acceptance Test,
2. 对Controller 开始编写一个Functional Test
3. 编写一个ActionMailer Test.
4. Invitation Model的 Unit Tests

选择哪一个测试好呢?显然这4个测试的粒度是依次递减的。我习惯于从最小粒度的Test开始编写,因为这样我能够保证每次都以最快速度来通过测试,步入下一个迭代。

这里有一个疑问,大粒度的Test往往能够覆盖细粒度Test所描述的行为,那么细粒度Test是否是一种增加开发成本的冗余?显然不是。一个Model里面的Bug在Functional Test里面发现和Unit Tests里面发现成本是不一样的。

从最小粒度的Test开始并不是容易的事情,因为当我从一个失败的Test中的反馈才知道通过这个Test还要从更底层开始实现,那么这个Test的粒度很有可能过大了。我的做法是注释掉这个Test,在底层编写更细粒度的Test,通过以后回过头来处理这个测试。有很强的Prefactoring能力也许会降低这种探索的成本,不过对于我这种智商,还是从最小粒度的测试开始比较好。
一网打尽身份验证与授权:深入剖析ASP.NET Core Identity在C#中的全方位实战应用 ASP.NET Core Identity 是 Microsoft 提供的一个强大且可扩展的身份验证和授权框架,用于构建基于用户账户、角色和权限的Web应用程序。它提供了用户注册、登录、密码管理、多因素认证、角色分配、授权等功能,与ASP.NET Core框架深度集成,简化了安全相关的开发工作。通过上述代码示例和注释,展示了如何安装配置Identity、自定义用户实体与数据库上下文、实现用户注册登录、管理角色与用户角色关系,以及如何使用授权策略保护应用程序资源。,并指定用户和角色类型以及主键类型。 阅读详情

相关推荐

Jenkins离线安装保姆级教程:从下载.war包到SVN+Maven项目一键部署(附避坑脚本)

本文详细介绍了Jenkins离线安装的全流程,包括.war包下载、SVN+Maven项目配置及自动化部署。特别针对内网环境提供解决方案,涵盖插件管理、开发工具链配置、构建触发器和SSH部署等关键步骤,帮助企业在网络隔离环境下实现高效持续集成。

weixin_30096975的博客 373

tdd的粒度

发现这个问题目前还处于空白状态,搜了很久没看见讨论。希望管理员不要把它移到问答区,大家发帖子或多或少都会有些疑问,没疑问的帖子还会有讨论价值吗。 进入正题。一个系统的功能结构都是树形的,底层的最简单,越往上就越复杂,因为它对底层功能的集成越来越多。刚开始时的测试都是针对底层编写的,这很轻松,基本上没问题;可当需要编写高层功能时,问题就来了:要不要写测试? 1、写。这就是每一层都写测...

hyj1254 179

探索Vortex开源GPGPU:RISC-V SIMT架构(4-1),Execute SFU(1)

本文详细分析了Vortex RISC-V内核6级流水线中Execute阶段的SFU(特殊功能单元)模块。重点介绍了SFU的数据流结构,包含dispatch_unit、pe_switch、csr_unit、wctl_unit和gather_unit五个子模块。文章深入解析了warp控制指令wspawn和tmc的实现机制:wspawn用于激活指定数量的warp并设置新PC值,tmc则用于控制线程掩码和warp状态。通过C代码和汇编指令的对照分析,阐明了这些指令在并行计算中的关键作用,包括线程激活、状态切换和执行

weixin_55313207的博客 1363

如何控制单元测试的粒度?

单元测试的粒度问题一直是软件开发社区面临的现实问题,最近,陈皓针对StackOverflow上的老问题做了总结,并发表了自己的看法,读者在随后的评论中也进行了讨论。\u0026#xD;\nJohn Nolan在《How deep are your unit tests?》中问道:\u0026#xD;\n\u0026#xD;\nTDD需要花时间写测试,而我们一般多少会写一些代码,而第一个测试是测试...

啊啊啊啊2 577

高等数学/概率论/数理统计/线性代数/离散数学面试-核心概念-问题理解

特征值与特征向量是线性代数中的概念,它们与线性变换有关。在线性变换中,如果存在非零向量 v ,使得当该向量通过变换后,其方向不变,只是长度发生了变化,那么这个向量 v 就是特征向量。而这个长度变化的比例因子,即变换前后向量长度的比值,称为特征值。数学公式表示:通俗易懂的解释:想象一下,你有一个可以伸缩的橡皮筋,这个橡皮筋可以代表一个向量。现在,你有一个特殊的机器,它可以改变橡皮筋的形状,但不会改变它延伸的方向。当你把橡皮筋放入机器中,机器会拉伸或压缩橡皮筋,但橡皮筋的方向保持不变。

m0_64198455的博客 2292

IFRS 9与CECL对比解析:跨国企业财务必须掌握的两种信用损失模型

本文深度解析IFRS 9与CECL两种信用损失模型的差异,帮助跨国企业应对财务合规挑战。从基础架构、数据治理到监管策略,详细对比三阶段模型与单一阶段模型的核心区别,并提供实施双轨制的实务建议,助力企业优化资本管理和税务筹划。

3c4x5z6v7b的博客 668

TDD简介

2001年2月《敏捷宣言》签定,宣告了敏捷开发运动的开始。敏捷的开发方式引起越来越多开发者的关注,世界上出现了各种各样的敏捷软件开发方法, SCRUM,Crystal,特征驱动开发(Feature Driven Development,FDD),自适应软件开发(Adaptive Software Development,ADP)以及极限编程(eXtreme Programming,XP) 等等

老睿的专栏 4391

【Bug已解决】npm install -g @anthropic-ai/claude-code 出现 EACCES: permission denied 解决方案

方案适用场景推荐指数nvm 管理 Node长期开发环境,一次配置永久生效⭐⭐⭐⭐⭐修改 npm 全局目录不想引入 nvm,快速解决⭐⭐⭐⭐修复现有目录权限之前用过 sudo 装包,需要修复⭐⭐⭐Windows 管理员/改目录Windows 平台专用⭐⭐⭐⭐官方原生安装脚本想彻底避开 npm 权限问题⭐⭐⭐⭐报的本质是npm 全局安装目录的属主权限与当前执行用户不匹配,而不是 npm 或 Claude Code 本身有问题。不要用sudo"强行"解决。

一键难忘的博客 1万+

如何理解TDD的三条规则

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

睡猫的博客 4007

课题申报新手入门必备指南!利用AI辅助搞定 6大关键部分,高效提升申报成功率(附AI提示词)

以下是我(或团队)与本课题相关的已有基础:【如:承担过的公开课、校本教研活动、教学改革实践、课程建设、区级/校级课题、教学反思积累等】请你完成以下任务:1)判断哪些内容与本课题的研究目标和内容具有直接或间接关联;以下是我当前的研究设想(可能比较笼统):【填写你的研究想法 / 教学困惑 / 初步设想】,请你帮我完成以下任务:1)先判断该设想中隐含的核心研究问题是什么;以下是我目前拟定的研究目标,请你从课题评审视角进行校正:【逐条粘贴你已有的研究目标】,请你帮我:1)判断每个目标是否具体、清晰、可评估;

智能AI让学术科研更容易 917

小龙虾们的好伙伴专栏导航

本文系统解析了OpenClaw技术架构,包括Channel层和网关层的设计实现,并与AgentSkills等技术方案进行对比。同时提供了OpenClaw的系列实用指南,涵盖小龙虾培养、客户资源管理、系统自动化巡检以及技术趋势助手构建等应用场景,帮助用户从零成本入门到高效落地应用,实现业务全流程自动化管理。

wend的博客 209

TDD 的本质不是 TDD

在敏捷推进的过程中,一般认为有三大难点。 第一大难点就是故事拆分,我们的故事又要纵拆,又要拆小。纵拆就意味着横跨整个端到端的流程,拆小意味着尽量要短。而且纵拆和拆小本身相互就是矛盾的,所以觉得敏捷推进第一难点就是拆分。 第二大难点,就是我们平时说的团队建设。大家想一想,我们大部分都不是企业的股东,那我们有什么力量去组织团队呢?第三大难点,就是我们经常说的T...

weixin_33766168的博客 356

STM32实战开发(133):基于STM32的智能GPS定位跟踪系统开发

本文详细介绍了如何基于STM32开发一个智能GPS定位跟踪系统。系统使用NEO-6M GPS模块获取实时定位数据,并通过SIM800L GPRS模块将定位信息上传到远程服务器。通过OLED屏幕实时显示位置数据,使用SD卡存储历史轨迹,并提供蜂鸣器报警功能。项目实现了GPS定位数据的获取、解析、存储和传输,为智能定位系统提供了完整的解决方案。

2201_76125393的博客 1643

TDD系列2-认识TDD

上篇说到TDD(Test Drive Development -测试驱动开发)是单元测试的最佳实践之一,实际上TDD远超出单元测试的范畴,TDD是敏捷开发中的一项核心实践和技术,也是一种设计方法论。

davidwkx的博客 525

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[转]如何控制单元测试的粒度?

单元测试的粒度问题一直是软件开发社区面临的现实问题,最近,陈皓针对StackOverflow上的老问题做了总结,并发表了自己的看法,读者在随后的评论中也进行了讨论。 John Nolan在《How deep are your unit tests?》中问道: TDD需要花时间写测试,而我们一般多少会写一些代码,而第一个测试是测试我的构造函数有没有把这个类的变量都设置对了,这会不会太过...

该写点东西了 759

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

测试驱动开发(TDD):工程师的实战应用与效能突破

TDD实践的核心在于"红-绿-重构"循环,通过测试用例驱动开发,将质量管控左移。测试工程师需精准拆解需求为原子化用例,控制测试粒度,并设计边界值数据。TDD能显著降低缺陷率(案例显示从42降至7)和返工成本,但需团队协作突破落地障碍。可持续策略包括构建测试金字塔(70%单元测试为主)和分阶段改造遗留系统。TDD将测试从发现缺陷转变为预防缺陷,实现需求文档与代码的实时同步。

2501_94480392的博客 283

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

从 TDD 到测试策略

前端没法 TDD / 前端不容易做 TDD / 前端 TDD 收益不大。这是进公司后无数人给我判的“死刑”。事实上好像的确如此?

teobler的博客 733

Superpowers - 09 从构思到落地:如何用「计划编写与任务粒度」驾驭 AI 时代的软件开发

本文系统介绍了AI开发工具Superpowers中的writing-plans技能,这是一种面向"零上下文工程师"的任务计划编写方法。文章从六个方面展开:首先强调在AI时代需要建立"可执行计划语言"的重要性;其次说明计划在整个开发流水线中的关键位置;然后提出核心理念是为"对问题域一无所知"的执行者编写计划;接着详细讲解计划文档的标准头部结构;再介绍文件结构映射的设计原则;最后重点阐述如何将任务拆分为2-5分钟可完成的细粒度步骤。该方法通过结构化文档

小工匠 1474

关于“测试驱动开发”的问答

谢谢大家给了我很多值得思考的问题,下面是我对这些问题的一个回答,希望能有所帮助。最关键的,还是亲手去试一次。 1、如何保证测试代码的正确性?这是一个很实际,也是很常见的问题。我想这个问题并没有一个非常完美的答案,其实从理论上探讨倒是更像“鸡生蛋,蛋生鸡”的问题。首先要确定的是我们不可能为测试代码再写一个测试代码。其次这个问题的解决可以通过缩小TDD的粒度来解决这个问题。在Kent Be

shanyou的专栏 1751

为什么TDD

我发现了一篇特好的文章,把什么是测试驱动讲解的灰常清晰、易懂,所以迫不及待得来转帖,原文出自thoughtworks的 张开封, 以下是原文. http://kfzhang.thoughtworkers.org/2012/05/why-tdd/ 1. 反映真实需求 这里存在先写测试和后写测试的区别。 先说后写测试。根据很多经验,在直接写产品实现代码时,需要考虑需求,同时需要兼顾实现的细节,

popeer的专栏 931

【转】单元测试要做多细?

这篇文章主要来源是StackOverflow上的一个回答——“How deep are your unit tests?”。一个有13.8K的分的人(John Nolan)问了个关于TDD的问题,这个问题并不新鲜,最亮的是这个问题的Best Answer,这个问题是—— “TDD需要花时间写测试,而我们一般多少会写一些代码,而第一个测试是测试我的构造函数有没有把这个类的变量都设置对了,这会不会太...

weixin_30677475的博客 76

TDD练习

今天在收集中看到一道面试题,网络引用是:http://www.iteye.com/topic/954262。题是这样的:   如何编程实现:输入M,N两个数,从1至N开始循环数数,每数到M输出该数值,直至全部输出。例如M是3,N是20,那么相当有20个人,1,2,3循环报数,数到3的就打印出他的序号,直到所有这20个数全部输出为止。 题目摘自:http://jerval.iteye.co...

sasion 602

TDD测试驱动笔记

三个策略: 伪实现: 返回一个常量,使得测试样例 显明实现: 真正的代码实现 三角策略:

newbaby2012的专栏 176

“单元测试要做多细?”[转载]

原文出处:酷壳 - CoolShell.cn作者:陈皓这篇文章主要来源是StackOverflow上的一个回答——“How deep are your unit tests?”。一个有13.8K的分的人(John Nolan)问了个关于TDD的问题,他说——“TDD需要花时间写测试,而我们一般多少会写一些代码,而第一个测试是测试我的构造函数有没有把这个类的变量都设置对了,这会不会太过分了?那么,...

weixin_33755847的博客 81

单元测试要做多细

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33694172的博客 90

【superpowers基本Skill】writing-plans 技能

writing-plans 技能是编写全面的实现计划,假设工程师对我们的代码库有零上下文和有问题的品味。记录他们需要知道的一切:每个任务要触摸哪些文件、代码、测试、他们可能需要检查的文档、如何测试它。给他们整个计划作为可咬合的任务。DRY。YAGNI。TDD。频繁提交。

rengang66的博客 1025
上一篇: 林子大了啥鸟都有
下一篇: 什么是Ruby之道?
dongbin_cn
博客等级 码龄20年 2粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值