- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
[编辑]: Click here在适当的网站上提出问题。
当您正在编写测试并且到了需要使测试通过的地步并且您意识到您需要一个额外的功能片段并且应该将其分离到它自己的功能中时,您会怎么做?这个新功能也需要测试,但 TDD 周期说让测试失败,让它通过然后重构。如果我正处于尝试通过测试的阶段,我不应该停下来开始另一个失败的测试来测试我需要实现的新功能。
例如,我正在编写一个具有函数WillCollideWith(LineSegment)的点类:
public class Point {
// Point data and constructor ...
public bool CollidesWithLine(LineSegment lineSegment) {
Vector PointEndOfMovement = new Vector(Position.X + Velocity.X,
Position.Y + Velocity.Y);
LineSegment pointPath = new LineSegment(Position, PointEndOfMovement);
if (lineSegment.Intersects(pointPath)) return true;
return false;
}
}
当我意识到我需要一个 LineSegment.Intersects(LineSegment) 函数时,我正在为 CollidesWithLine 编写测试。但是,我是否应该停止我在测试周期中所做的事情去创建这个新功能?这似乎打破了“红、绿、重构”原则。
我是否应该只编写检测 CollidesWithLine 函数内部的 lineSegments Intersect 的代码,并在它工作后重构它?这在这种情况下会起作用,因为我可以从 LineSegment 访问数据,但是如果这种数据是私有(private)的呢?
最佳答案
如果您按照 Kent Beck 在他的书中的定义严格遵循 TDD,那么当您遇到您也需要测试的内容时,请将其记在一张纸上(他将其称为测试列表),然后专注于当前测试。 Kent 建议您应该一次进行一项测试。
从测试优先的角度来看,您应该专注于使测试通过,这有几个选项:
在当前方法中内联编写 Intersects 的实现。 “绿色”意味着工作,而不是漂亮。工作后,重构代码和测试。
停止它。将测试替身(模拟)传入可以模拟合约的方法。
假装。当你遇到一个你需要的方法时,记下其他测试,然后写一个基本的实现(例如“return true”)
关于unit-testing - 当 TDD 测试显示需要的新功能也需要测试时该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13312705/
为了方便大家管理系列博文,今天发布一个预览版新功能——合集。 您可以在博客后台 合集 栏目中创建新合集 或者在编辑博文时快捷地创建新合集 然后可以在编辑时将博文与合集关
我正在尝试实现 AirDrop我的 iOS 应用程序中的功能。但是,我无法找到有关此功能的任何特定教程或资源。有人可以向我提供有关 AirDrop 实现的示例或链接吗? iOS 7 中的功能? 非常感
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
是否需要重写 equals() 方法来在 Switch 案例中使用 String 数据类型 最佳答案 您不仅不需要这样做,而且根本无法这样做(String 是 final)。 关于Java 7 新功能
我有一些关于 DB2 NF 模式的客户问题。谷歌对此知之甚少。 我已经能够 推断 以下,但我并不完全相信它...... NF 和 CM(兼容模式)是大型机上 DB2 v8 上的设置。 CM 中 z/O
Market 添加了设备兼容性检查。现在我们可以检查应用程序是否适用于特定设备,例如 HTC 手机、三星 Galaxy 等。 开发者方面如何:我们如何才能只为特定设备构建应用程序或限制只为平板电脑开发
fastlane supply android元数据具有以下结构: └── fastlane └── metadata └── android ├──
所以我的理解是,当对象的最后一个剩余所有者被销毁或重新分配时,shared_ptr 会自动从内存中释放,(看起来好得令人难以置信?)并且当许多实例可能共享同一个对象时它很有用。正确吗? 所以在我的例子
这个问题在这里已经有了答案: Backticks (`…`) calling a function in JavaScript (3 个答案) 关闭 6 年前。 遇到过这个例子,完全迷路了... c
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4年前关闭。 Improve t
我是 Laravel 5 的新手。我目前正在做一个带有 CRUD 功能的任务项目。我做了删除功能,但是update和add还是乱七八糟的。请帮助我。 我的数据库只有 1 个表,'tasks' 有 3
根据 Sass 3.3 发行说明,以下代码应该可以工作。 @mixin element($name) { @at-root #{&}__#{$name} { @cont
我们如何监听“http.Server”事件?或者我们如何实例化一个“http.Server”对象? 根据nodejs.org/api.html: “http.Server”是一个 EventEmitt
我正在开发一个 React 应用程序,该应用程序从 Rails api 提供数据。我目前正在开发一个包含嵌套关联的表单(即 model_a 中有许多 model_b,您可以以相同的表单创建它们)。 我
在我的应用程序中,我想使用 iOS 7 的新功能:静默远程通知。另外,还要保证在iOS 6下能正常安装运行。这两个场景会不会冲突? 我试过这个: #ifdef IOS7_OR_LATER - (voi
我是 Apple 平台的新手,我从 xcode 7 和 swift 开始。我想为最新版本的 iOS (9.0) 创建应用程序,但支持 2 个旧版本,如 8 和 7。 基础 SDK:最新 (iOS 9.
在我的Redis缓存中,我已经运行 SET 12345 JoeDude SET JoeDude "It works!!" 我有一个Lua脚本,打算从终端运行: lua local user=redis
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我正在redis中编写一个lua脚本,并在 Spring 执行它,内容很简单 local store = redis.call('hget',KEYS[1],'capacity') print(s
“选择调试应用程序”和“等待调试器”是果冻 bean 的新功能,有人知道如何使用这些新功能吗? 最佳答案 我在这里找到了答案:http://developer.android.com/tools/de
我是一名优秀的程序员,十分优秀!