TDD新手推荐的东西

时间:2009-10-20 03:24:54

标签: tdd

我对TDD世界很陌生。我有一些关于TDD的问题。

  1. 我是否必须先在TDD中进行测试?我听说TDD不是关于测试的。这是关于设计。我同意先做测试是好的,但我想知道的是,如果我们遵循测试最后的方法,它仍然是TDD吗?

  2. 我们是否更喜欢使用BDD而不是TDD?我曾经首先列出我的任务规范,然后尝试根据我的规范编写测试用例。这是错误的方法吗?你们喜欢使用BDD或TDD进行开发吗?

  3. 嘲讽?我的团队中的一些人过去经常说他们正在尝试TDD。但他们从不遵循测试优先的方法。他们从不嘲笑数据。我们是否必须在TDD中模拟数据?

  4. “使用Mock Library”Vs“手动创建带有数据的模拟类”。您更喜欢使用模拟库还是使用一些模拟数据创建模拟类?

  5. 推荐的TDD或BDD书籍?我阅读了Kent Beck的经典测试驱动开发 - 通过示例。我发现这本书是在TDD的早期阶段出版的,所以本书中的一些内容并没有过时。

7 个答案:

答案 0 :(得分:3)

  

1)。我是否必须先在TDD中进行测试?   我听说TDD不是关于测试的。   这是关于设计。我同意了   做测试优先是好的但是我   想知道的是它还是TDD   如果我们遵循测试最后的方法?

是的!严格来说,TDD是测试驱动开发。所以开发是由测试驱动的。所以先测试,然后开发程序以通过所有测试。

  

2)。我们是否更愿意使用BDD   TDD?我曾经列出过   首先说明我的任务和我   尝试根据我的内容编写测试用例   规格。这是错误的方法吗?   你们喜欢使用BDD还是TDD?   为了你的发展?

我认为你应该平衡它们。使用其他技术首先提供最佳时间提供的整体设计(进行风险管理以找到您应该花费在设计上的适当时间)(查找关于“RUP essential”的论文。它提供了一个关于平衡敏捷和少敏捷)。确定最关键的部分然后创建测试并开发以通过测试。

  

3).Mocking?有些人来自我的团队   过去常说他们是在做事   TDD。但他们从不遵循测试优先   做法。他们从不嘲笑数据。做   我们必须在TDD中模拟数据吗?

先测试和嘲弄不是一回事。 Mocking允许代码更加可测试,并且当其他部分(此代码依赖)不存在时,可以测试代码。因此,如果没有这种依赖(IF !!),那么你可以不嘲笑它们。 (有关详细信息,请阅读关于Seam点的“Working Effectively with Legacy Code”。)

  

4)。 “使用Mock Library”Vs“手动创建带有数据的模拟类”。做   你喜欢使用模拟库或   使用一些模拟创建模拟类   数据?

我认为这就像使用别人的其他库或创建你的。完全取决于情况和许多因素。例如,如果您的项目很大并且您可以找到合适的模拟库,请使用它。

  

5)。任何推荐的TDD或BDD书籍?我读过Kent Beck的经典之作   测试驱动开发 - 举例。   我发现这本书出版于   TDD的早期阶段就这么一些了   本书中的内容并不多   过时的。

books on TDD here列表。

希望这有帮助。

答案 1 :(得分:2)

  1. 是的,这是关于设计,但这种设计方法确实涉及首先编写测试。人们遵循这条规则有不同程度的严格,但我认识的大多数练习TDD的人倾向于认为遵循规则更好。
  2. BDD被描述为TDD正确完成。差异很小。基本上BDD只是将测试作为规范更加明确。
  3. 对嘲笑的有用性存在很大的分歧。我个人更喜欢测试接口,我避免将期望放在模拟中。也就是说,出于各种原因,单独测试仍然是个好主意,其中最重要的原因是测试速度。没有什么比重构一段仍然完全符合前一个界面的代码更令人讨厌的了,它具有完全正常的最终结果,但是所有测试都失败了,因为模拟的期望不再被满足了。错误的模拟使用会导致测试实现细节,而不是确保执行的工作是正确的。
  4. 见#3。我更喜欢使用没有期望的存根或者集成测试。
  5. 测试驱动开发:Dave Astels的实用指南。强烈推荐。

答案 2 :(得分:1)

  

我是否必须先在TDD中进行测试?

是的,TDD本质上是:

vagueness -> bullet points -> tests -> code

如果您正在使用其他一些过程,那么使用某些工具和技术是有意义的,但它实际上不是TDD。无论什么值得。

  

嘲讽?

不同的大师会提倡4个或多或少可行的替代方案。

  1. mock-to-zero:模拟每个依赖项,使每个单元(例如java类)都经过有效的隔离测试。

  2. 模拟到线性:仅模拟循环依赖性,因此存在测试的线性排序,其中每个单元仅使用经过测试的依赖性进行测试。

  3. mock-for-speed:只模拟慢速,异步或其他有问题的界面。

  4. 零模拟:只需测试内容,使用调试器计算出事情发生时会发生什么。

  5. 如果你不喜欢你的嘲弄工具,请避免使用#1;如果你不喜欢你的调试器,请避免使用#4。

答案 3 :(得分:1)

对于BDD,您可以在以下网址找到很好的参考:

您也可以为Dan North

跟踪the difference between TDD and BDD is small的工作

其他链接Learning Behavior Driven Development (BDD)

对于我自己,我想如果你做BDD你已经做过TDD

我希望这会有所帮助

答案 4 :(得分:0)

  1. 是的,先测试就像TDD一样。
  2. 如果你没有任何经验,我会从TDD开始,让你的脚湿透(我的意见)。
  3. 你不必嘲笑做TDD。但是,如果您的应用程序具有依赖于其他类的类(这几乎是有保证的),那么您应该遇到嘲弄。 BTW模拟不是嘲笑数据,而是嘲笑你正在测试的类和它的协作者之间的交互,它依赖于其他类。
  4. 手工嘲笑是了解它的一种好方法,但如果你不想花费你的全部时间来编写假实现,那么嘲讽/隔离框架就是你的选择。
  5. IMO,Beck的书是永恒的经典之作,也是一个很好的开始。如果您使用.NET,我只需阅读“单元测试的艺术”,其中详细介绍了单元测试时的良好技术和实践。

答案 5 :(得分:0)

(我选择了最容易回答的问题,因为我没有资格回答其他问题)

  

TDD或BDD的任何推荐书籍?

Agile Software Development, Principles, Patterns, and Practices , by Robert C. Martin

Extreme Programming Explained ,by Kent Beck

答案 6 :(得分:0)

  

我是否必须先在TDD中进行测试?

是的,TDD必须先测试。首先编写测试允许考虑要根据行为而不是实现来编写函数,重点是调用函数和验证结果。 这导致了可测试的代码;否则你可能会发现自己陷入了死胡同 首先编写测试也可以更容易地忘记或忽略测试。

此外,写作和失败 - 测试首先允许测试测试。在代码之后编写的测试可能永远不会失败。

  

我们是否更喜欢使用BDD而不是TDD?

有人说BDD is TDD done right因为重点放在规格上。

  

我们是否必须在TDD中模拟数据?   我团队的一些人曾经说过   他们正在尝试TDD。但是他们   永远不要遵循测试优先的方法。

不必使用模拟对象。只有一种工具,有时可以很方便。

  

“使用模拟库”Vs“创建   手动使用数据的模拟类“。

我从未觉得需要求助于模拟对象生成器。

  

TDD或BDD的任何推荐书籍?

通过示例,TDD是一个非常好的教程,并提供了一堆模式。另一本很棒的书,更多的参考文献是xUnit patterns