【问题标题】:TDD with zero production code零生产代码的 TDD
【发布时间】:2012-01-29 22:49:24
【问题描述】:

我正在阅读 Bob Martin 的“The Clean Coder”,在那里我读到了在任何生产代码之前编写测试的纪律。

但是,msdn 中 asp.net 的 TDD 文章显示正在创建类和方法存根,然后从这些存根生成单元测试。

我想知道在业务逻辑层写一行代码之前,我是否可以写完所有的单元测试。

编辑:1. 我的想法是在必要时重构整个类关系结构本身。如果我从存根开始,那么我将不得不重新编写测试,以防类和方法本身是错误的。

编辑:2.除此之外,重点在于数据驱动测试,所以如果我使用接口,我将如何编写完整的测试,我已经通过了所有字段,因为接口需要是通用的,我不认为他们'将拥有所有属性。最好的接口可以定义 CRUD 存根。

提前致谢。

【问题讨论】:

  • 可能有一些工具可以帮助你存根(我知道 resharper 对测试有一些支持),最简单的手动方法可能是针对接口编写测试并在之后实现接口。

标签: tdd webforms


【解决方案1】:

当然可以。是什么阻止了你?

(虽然通常情况下,您会一次编写 一个 测试,而不是一次编写所有测试。将它们全部预先编写起来有点像大设计前期,又名瀑布。部分TDD 的要点是您可以随心所欲地进行设计并根据需要进行重构,因此您最终会得到一些复杂的东西以满足您的需求——它可以帮助您避免YAGNI。)

如果您遵循经典的 TDD 原则,那么您首先编写一个测试以失败,您运行它并观察它失败,然后您才编写必要的代码让它通过。 (这有助于确保不存在 subtle error in your test。)如果您正在测试尚不存在的代码,您期望的第一个失败是编译器错误。

这实际上很重要。您正在测试不存在的代码。当然编译应该失败。如果没有,那么你需要找出原因——也许你的测试实际上没有被编译,或者可能已经有一个与你正在考虑编写的新类同名的类,或者你的其他东西没想到。

没有什么能阻止您先编写不可编译的测试,然后再返回编译。 (仅仅因为微软在编写他们的测试工具时不了解 TDD 并不意味着你不能自己做。)IDE 可能会在你做的时候踩到你的脚趾(完成现有类的名称而不是离开您尝试编写的名称),但您很快就会知道何时按 Esc 来处理它。

Visual Studio 2010 允许您暂时switch Intellisense into a "test-first" mode,在这种情况下它不会踩到您的脚趾。但是如果你碰巧使用了 ReSharper,我认为他们还没有这个功能。

【讨论】:

  • 您的答案似乎是正确的,但工作量很大。我希望它会更好,因为我会通过实践成熟。也许我需要一些 kata 剂量:D.
  • 练习会变得更容易。拥有正确的工具会有所帮助。如果您有 ReSharper,“确保它不编译”步骤实际上并不需要编译;就像“Marker Bar 中是否有红色条纹”一样简单。
  • 就像注释一样,当您执行外向内 BDD 样式时,您最终会首先从外部类生成您的类 - 所以通常情况下您的测试会编译。但是,当您运行它们时,它们仍然会失败。
【解决方案2】:

先创建方法存根还是先创建测试并不重要。如果您先编写测试,您的编辑器可能会抱怨方法/类存根不存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 2010-12-08
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多