2012-01-29 97 views
0

我正在阅读鲍勃马丁的“清洁编码器”,在那里我阅读了有关在任何生产代码之前编写测试的规程。零生产代码的TDD

然而,正在创建在MSDN节目类和方法存根asp.net TDD文章和从那些存根产生然后单元测试。

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

编辑:1.我的想法是重构到如果需要改变整个类关系结构本身的程度。如果我从一个存根开始,那么在类和方法本身错误的情况下,我将不得不重写这些测试。

编辑:2.除此之外,主旨是数据驱动的测试,所以如果我使用的接口如何将我写完整的测试,其中我已经通过了所有的领域,因为接口需要是通用的,我不认为他们将拥有所有的财产。最好的接口可以定义CRUD存根。

在此先感谢。

+1

有可能是工具,可以帮助你存根(我知道resharper有一些先测试的支持),最简单的手动方式可能会写测试接口和后来实现接口。 – 2012-01-29 13:41:38

回答

4

当然可以。什么东西阻止你? (但通常情况下,您一次只能编写一个一个测试,而不是一次写完所有内容)将它们全写入Big Design Up Front,aka Waterfall的所有前期内容中,TDD的一部分是您可以根据需要进行设计并进行重构,因此您最终只能得到与实际需要一样复杂的内容以满足您的需求 - 它可以帮助您避免YAGNI。)

如果您遵循经典的TDD原则,那么你写一个测试失败第一,你运行它和手表它失败,只有这样你才能写出必要的代码,使其通过。 (这有助于确保不存在subtle error in your test。)如果您正在测试尚不存在的代码,则第一次出现故障是您所期望的编译器错误。

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

没有什么能够阻止您先编写不可编译的测试,然后再回去编译。 (仅仅因为微软在编写测试工具时不了解TDD并不意味着你无法自己完成测试工作。)IDE可能会在脚步上踩一点点(完成现有类的名称而不是离开你想写的名字),但你很快就会知道什么时候按Esc来处理这个问题。

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

+0

你的回答似乎是正确的,但这是非常多的工作。我希望这会更好,因为我会通过实践成熟。可能是我需要一些剂量的卡塔:D。 – 2012-01-29 14:54:56

+1

练习变得更容易。拥有合适的工具可以提供帮助。如果你有ReSharper,那么“确保它不能编译”步骤实际上并不需要编译;它就像“在[Marker Bar]中是否有红色条纹一样简单”(http://blog.excastle.com/2007/02/02/resharper-day-2-the-color-bar-and-the-green -框/)”。 – 2012-01-29 15:08:48

+0

就像一个说明,当你在BDD风格的外部进行时,你最终会从外部类首先生成你的类 - 所以你的测试通常会被编译。但是,当你运行它们时,它们仍然会失败。 – Lunivore 2012-02-03 12:08:03

0

如果先创建方法存根或测试,则无关紧要。如果你先写测试,你的编辑可能会抱怨方法/类存根不存在。