Unit testing 测试驱动开发的缺点?

Unit testing 测试驱动开发的缺点?,unit-testing,testing,tdd,Unit Testing,Testing,Tdd,采用测试驱动设计会损失什么 只列出负面消息;不要以否定的形式列出好处。你会浪费大量时间编写测试。当然,在项目结束时,可以通过更快地捕获bug来节省时间。TDD需要特定的代码组织。这可能效率低下或难以阅读。甚至是建筑上的错误;例如,由于不能在类外调用private方法,因此必须将方法设置为非私有以使其可测试,这是错误的 当代码更改时,您也必须更改测试。通过重构,这可能是一个巨大的挑战 大量的额外工作。好吧,还有这个扩展,你需要调试你的测试。此外,编写测试还需要一定的时间成本,尽管大多数人都认为这是

采用测试驱动设计会损失什么


只列出负面消息;不要以否定的形式列出好处。

你会浪费大量时间编写测试。当然,在项目结束时,可以通过更快地捕获bug来节省时间。

TDD需要特定的代码组织。这可能效率低下或难以阅读。甚至是建筑上的错误;例如,由于不能在类外调用
private
方法,因此必须将方法设置为非私有以使其可测试,这是错误的

当代码更改时,您也必须更改测试。通过重构,这可能是一个巨大的挑战
大量的额外工作。

好吧,还有这个扩展,你需要调试你的测试。此外,编写测试还需要一定的时间成本,尽管大多数人都认为这是一项前期投资,在应用程序的整个生命周期中,它在节省时间的调试和稳定性方面都会得到回报


不过,我个人遇到的最大问题是,要学会如何实际编写测试。在一个团队中,尤其是在一个已建立的团队中,很难让他们相信花费的时间是值得的。

我支持关于初始开发时间的答案。您还将失去在没有安全测试的情况下舒适工作的能力。我也被描述为TDD疯子,所以你可能会失去一些朋友;)

它被认为比较慢。从长远来看,这并不是真的,因为它会让你在今后的道路上省去很多痛苦,但你最终会写更多的代码,所以你可能会把时间花在“测试而不是编码”上。这是一个有缺陷的论点,但你问了

当您有大量测试时,更改系统可能需要重新编写部分或全部测试,具体取决于哪些测试因更改而无效。这可能会使相对快速的修改变成非常耗时的修改


此外,您可能会开始更多地基于TDD而不是实际良好的设计原则来做出设计决策。虽然您可能有一个非常简单、简单的解决方案,不可能按照TDD的要求进行测试,但现在您有了一个更复杂的系统,实际上更容易出错。

为“随机”数据(如XML提要和数据库)编写测试可能很困难,也很耗时(没有那么困难)。我最近花了一些时间处理天气数据源。为此编写测试是相当令人困惑的,至少我没有太多的TDD经验。

我认为对我来说最大的问题是“进入测试”所花费的时间损失巨大。我仍然处于TDD之旅的开始阶段(如果您感兴趣,请参阅我的更新以了解我的测试冒险),我已经花了小时开始

让你的大脑进入“测试模式”需要很长时间,编写“可测试代码”本身就是一项技能

TBH,我尊重地不同意将私有方法公开,这不是问题所在我在新的工作方式中没有比以前更多的公开方法。不过,它确实涉及到架构更改,并允许您“热插拔”代码模块,以使其他所有内容更易于测试。要做到这一点,您应该而不是使代码的内部更易于访问。否则我们就回到了原点,一切都是公开的,其中的封装在哪里

因此,简言之,(国际海事组织):

  • 思考所需的时间(即实际进行摸索测试)
  • 了解如何编写可测试代码所需的新知识
  • 了解使代码可测试所需的体系结构更改
  • 提高您的“TDD编码器”技能,同时努力提高我们出色的编程技能所需的所有其他技能:)
  • 组织代码库以包含测试代码,而不破坏生产代码。

PS:如果你想获得正面的链接,我已经询问并回答了几个问题,请查看我的。

你将失去承担多重责任的大型课程。 您还可能会丢失具有多重职责的大型方法。 您可能会失去一些重构的能力,但也会失去一些重构的需要

杰森·科恩说: TDD要求您的代码具有特定的组织。这在架构上可能是错误的;例如,由于私有方法不能在类外调用,因此必须将方法设置为非私有以使其可测试

我说这表明缺少抽象——如果私有代码真的需要测试,它可能应该在一个单独的类中


Dave Mann

TDD要求您在编写代码以通过这些测试之前,计划好类的运行方式。这是一个加号和一个减号

我发现很难在“真空”中编写测试——在编写任何代码之前。根据我的经验,每当我在写我的课程时不可避免地想到一些我在写初始测试时忘记的东西时,我往往会被测试绊倒。现在不仅要重构我的类,还要重构我的测试。重复三四次,可能会让人沮丧


我更喜欢先写一个类的草稿,然后写(并维护)一组单元测试。在我有了草稿之后,TDD对我来说很好。例如,如果报告了一个bug,我将编写一个测试来利用该bug,然后修复代码以使测试通过。

使用TDD进行原型设计可能非常困难-当您不确定要走哪条路来解决问题时,提前编写测试可能会很困难(非常广泛的测试除外)。这可能是一种痛苦

老实说,我不认为绝大多数项目的“核心开发”有任何真正的缺点;通常,人们认为他们的代码足够好,以至于他们不相信,他们的讨论比应该的要低调得多