What are some common misunderstandings about TDD?阅读对这个问题的回答测试驱动开发的缺点? 我的印象是,对于什么是TDD以及应该如何进行,存在很多误解。 在这里解决这些问题可能很有用。 我觉得被接受的答案是最弱的(测试驱动开发的缺点?)之一,也是那些可能正在编写特定测试的人的最复杂的答案。
TDD是一项投资。我发现,一旦我完全了解TDD,我失去的时间就很少了,而我损失的时间远远超过了维修时间。
如果测试变得非常复杂,则可能是时候审查设计了。 TDD应该引导您沿着较小,较不复杂的代码单元协同工作
这是所有人中最糟糕的一点! TDD应该确实是"测试驱动设计"。 TDD是关于设计而不是测试。为了充分实现TDD带来的价值,您需要玩具来驱动您的测试设计。因此,您应该重做生产代码以使测试通过,而不是相反。 现在是目前最烦人的:测试驱动开发的缺点?
就像公认的答案第一点一样,这似乎在测试中过于规范,并且普遍缺乏对TDD流程的理解。进行更改时,请从测试开始。更改测试以执行新代码,然后进行更改。如果该更改破坏了其他测试,则您的测试正在做他们应做的事情,失败了。对我来说,单元测试被设计为失败的,因此为什么要先进行RED阶段,并且决不能错过。 恕我直言,关于TDD的最大误解是:浪费时间编写和重构测试。这种想法就像"是的,一个测试套件很好,但是如果我们对其进行编码,该功能将更快地完成"。 如果正确完成,则可以在项目的整个生命周期内多次节省编写和维护测试所花费的时间,而不必花费时间在调试和修复回归上。由于测试成本是前期的,收益是随着时间的推移,因此很容易忽略。 其他重大误解包括忽略TDD对设计过程的影响,以及没有意识到"痛苦的测试"是一种严重的代码异味,需要迅速解决。 我看到许多人误解了哪些测试实际上对TDD有用。人们编写大型验收测试而不是小型单元测试,然后花太多时间维护他们的测试,然后得出结论,TDD无效。我认为BDD人员有一点要避免完全使用单词test。 另一个极端是人们停止进行验收测试,并认为因为他们进行单元测试,所以他们的代码已经过测试。这再次是对单元测试功能的误解。您仍然需要某种形式的验收测试。 只是在锅中抽出另一个答案。 最常见的误解之一是您的代码是固定的,即。我有这段代码,现在我将如何测试它?如果很难编写测试,我们应该问一个问题:如何更改此代码以使其更易于测试? 为什么..? 好吧,易于测试的代码是: 如果我们编写这样的代码,那么测试就轻而易举。有趣的是,巧合的是,易于测试的代码是更好的代码。 更好,更易于阅读,更易于测试,更易于理解,更易于调试。这就是为什么TDD通常被描述为设计练习的原因。 我认为这些问题颇具争议,因此容易引起误解:
我经常看到的误解是,TDD确保了良好的结果。 通常,测试是从有缺陷的需求中注销的,因此,开发人员生产的产品不能达到用户期望的效果。我认为,TDD的关键是与用户一起定义需求,同时帮助管理他们的期望。 |