我正在经历鲍勃·马丁的“The Clean Coder”,其中我读到了在任何生产代码之前编写测试的规则。
然而,msdn中的asp.net的TDD文章显示正在创建的类和方法存根,然后从这些存根生成单元测试。
我想知道在编写业务逻辑层中的单行代码之前是否可以编写所有单元测试。
编辑:1。我的想法是重构到我需要时改变整个类关系结构的程度。如果我从存根开始,那么我将不得不重新编写测试,以防类和方法本身出错。
编辑:2。除此之外,重点是数据驱动的测试,所以如果我使用接口,我将如何编写完整的测试,我已经通过所有字段,因为接口需要是通用的我不认为他们将拥有所有属性。最好的接口可以定义CRUD存根。
先谢谢。
答案 0 :(得分:4)
当然可以。是什么阻止了你?
(虽然通常情况下,你会一次编写一个测试,而不是一次写下所有。将它们全部写在Big Design Up Front,又名瀑布上。部分TDD的一点是你按照自己的意愿设计并根据需要进行重构,所以你最终得到的东西只有你实际需要的那么复杂才能满足你的要求 - 它可以帮助你避免YAGNI。)
如果您遵循经典的TDD原则,那么您首先编写失败的测试,运行它并观察它失败,然后才编写必要的代码让它通过。 (这有助于确保没有subtle error in your test。)如果您正在测试尚不存在的代码,您预期的第一个失败是编译器错误。
这实际上很重要。您正在测试不存在的代码。当然编译应该失败。如果没有,那么你需要找出原因 - 也许你的测试实际上并没有被编译,或者可能已经有一个与你正在考虑写的新名称相同的类,或者其他什么你没想到。
没有什么可以阻止你先写一个不可编译的测试,然后回去编译。 (仅仅因为微软在编写测试工具时并不理解TDD并不意味着你不能自己做。)IDE可能会在你做的时候踩到你的脚趾(完成现有类的名称而不是离开你想写的名字,但你很快就会知道何时按Esc来处理它。
Visual Studio 2010允许您暂时switch Intellisense into a "test-first" mode,在这种情况下它不会踩到您的脚趾。但如果您碰巧使用ReSharper,我认为他们还没有这个功能。
答案 1 :(得分:0)
如果首先创建方法存根或测试,则无关紧要。如果您先编写测试,编辑器可能会抱怨不存在的方法/类存根。